【问题标题】:How do I run a single integration test in grails 3?如何在 grails 3 中运行单个集成测试?
【发布时间】:2017-02-07 21:13:51
【问题描述】:

Grails 3(至少 3.1.10)在仅运行特定测试方面存在问题。如何让它运行单个集成测试?

【问题讨论】:

    标签: unit-testing grails automated-tests


    【解决方案1】:

    这是运行单个集成测试的示例命令

    grails test-app *LoginFunctional* -integration
    

    如果你把 -integration 标志放在模式之前,test-app 命令将忽略模式并执行所有集成测试。

    【讨论】:

    • 这让我最近发疯了。谢谢。
    • 注意左通配符会扩展为完整的包路径,例如com.my.package.LoginFunctionalTest
    【解决方案2】:

    官方的命令行语法是grails test-app,可以选择后跟一个模式来匹配您要测试的完整命名空间类名称,例如org.myorg.ClassToTestorg.**.*,以及-unit-integration选择一个特定的阶段。请参阅docs

    不过,Grails 3.1.10 中有许多怪癖。

    1) grails test-app 不会总是运行测试,可能是依赖管理中的一个错误。如果您首先删除build/reports/tests/index.html 的测试报告,grails 会发现它实际上需要做一些事情来生成新报告。

    2) 有时事情会变得很奇怪。如果是这样,请执行grails clean; grails test clean。 (我还没弄清楚你是真的需要它们还是只需要两者之一。)

    3)官方方法应该可以,但如果没有,请先执行(2)。此外,如果您只想运行特定的集成测试,则需要添加 -integration 否则会出现错误。我认为如果没有这样的标志,Grails 会无条件地首先尝试运行单元测试,然后是集成测试,如果您的测试模式与任何单元测试不匹配,grails 将会出错。同样,如果模式只匹配单元测试,请添加 -unit 否则您会收到错误,但在这种情况下您仍然会获得正确的测试报告。

    4) 还有一种替代方法,即使用-Dtest.single=<classname> 标志。这将设置一个由 gradle 拾取的系统属性。如果我还添加了 -unit 标志,我只会让它正常工作,但我没有深入调查。

    【讨论】:

      【解决方案3】:

      我通常使用注解@IgnoreRest。记得import spock.lang.IgnoreRest 并在指定的类上运行测试。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-14
        • 1970-01-01
        • 2016-05-29
        • 1970-01-01
        • 1970-01-01
        • 2011-07-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多