我们有一个Groovy脚本,当一切正常时,该脚本以status
的0
退出,而对于不同类型的故障条件的non-0 status
退出。例如,如果脚本以用户和电子邮件地址作为参数,则对于无效用户,将以status
1
退出,对于无效电子邮件地址格式,以status
的2
退出。为此,我们使用System.exit(statusCode)
。这可以正常工作,但是使脚本难以编写测试用例。
在测试中,我们创建我们的GroovyShell
,创建我们的Binding
并调用shell.run(script,args)
。对于断言失败情况的测试,System.exit()
导致JVM(和测试)退出。
是否可以使用System.exit()
退出Groovy脚本?我尝试抛出未捕获的异常,但这会使输出混乱,并且始终使状态代码为1。
在我们的测试案例中,我还尝试了使用System.metaClass.static.invokeMethod
更改System.exit()
的行为以不退出JVM,但这似乎是一个丑陋的hack。
最佳答案
imho System.metaClass.static.invokeMethod
看起来不错。这是测试,这里的黑客很好。
您也可以围绕它创建自己的包装器,例如:
class ExitUtils {
static boolean enabled = true
static exit(int code) {
if (!ExitUtils.enabled) {
return //TODO set some flag?
}
System.exit(code)
}
}
并禁用它进行测试。
关于unit-testing - 如何在Groovy脚本中设置退出状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9316218/