Comment définir le statut de sortie dans un Script Groovy
Nous avons un Script Groovy qui se ferme avec un status
de 0
quand tout a fonctionné et un non-0 status
pour différents types de conditions de défaillance. Par exemple, si le script a pris un utilisateur et une adresse e-mail comme arguments, il serait sortie avec un status
de 1
pour un utilisateur non valide, et une status
de 2
pour une adresse email invalide format. Nous utilisons System.exit(statusCode)
pour cela. Cela fonctionne bien, mais qui rend le script difficile d'écrire des cas de test pour.
Dans un test, nous avons créer notre GroovyShell
, créer nos Binding
et appel shell.run(script,args)
. Pour les tests d'affirmer que les conditions de panne de la System.exit()
causes de la JVM (et le test) pour quitter.
Sont il des alternatives à l'utilisation de System.exit()
à la sortie d'un Script Groovy? J'ai expérimenté avec lancer les exceptions non traitées, mais qui encombre la sortie et fait toujours le code d'état 1.
Dans notre cas de test, j'ai également expérimenté avec l'aide de System.metaClass.static.invokeMethod
pour modifier le comportement de System.exit()
de ne pas sortir de la JVM, mais qui semble comme un vilain hack.
OriginalL'auteur Patrick | 2012-02-16
Vous devez vous connecter pour publier un commentaire.
à mon humble avis
System.metaClass.static.invokeMethod
a l'air bien. C'est de tester et de piratage est très bien ici.Aussi, vous pouvez créer votre propre emballage autour de lui, comme:
et de la désactiver pour les tests.
System.metaClass.static.invokeMethod
travail et il avait l'air beaucoup moins hacky.Juste un avertissement pour les autres qui tentent cette dans un Jenkins pipeline groovy script de cette étape, cette volonté de tuer toute Jenkins processus.
OriginalL'auteur
Ici est la technique que nous avons par la suite utilisé.
Nous ne pouvons pas simplement ignorer un appel à
System.exit()
depuis le script continuera à exécuter. Au lieu de cela nous voulons jeter une exception avec le statut désiré code. Nous lançons un (personnalisé)ProgramExitException
quandSystem.exit()
est appelé lors de nos testspuis nous intercepter
System.exit()
pour lever cette exceptionet enfin nous avons
GroovyShell
attraper toutProgramExitException
et retourner le code d'état de larun
méthode.Nos tests peuvent rester simple, nous n'avons pas besoin de changer quoi que ce soit dans les scripts et nous obtenons le comportement que nous attendons de course sur la ligne de commande.
OriginalL'auteur