unit-testing - 如何在Groovy脚本中设置退出状态

标签 unit-testing groovy exit-code

我们有一个Groovy脚本,当一切正常时,该脚本以status0退出,而对于不同类型的故障条件的non-0 status退出。例如,如果脚本以用户和电子邮件地址作为参数,则对于无效用户,将以status 1退出,对于无效电子邮件地址格式,以status2退出。为此,我们使用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/

相关文章:

javascript - 在我的案例中如何解决 'undefined is not a function'

java - 枚举 Java/Groovy 集合的 n 项组合

bash - puppet 退出代码 2,同时期望 0 with rundeck

c - 当仍有可访问的分配时,如何使 valgrind 报告错误

jquery - 如何在 ASP.NET MVC 中对客户端 jQuery/JavaScript 代码进行单元测试?

python - 在 python 单元测试中断言 `is`

c++ - "Catch"单元测试框架 - REQUIRE_THROWS_AS

java - 我应该如何在 Spring MVC 中创建 Groovy Controller

xml - Groovy XmlSlurper 访问根节点中的属性值

java bash命令问题