如何在 grails 3 中运行单个集成测试?
Posted
技术标签:
【中文标题】如何在 grails 3 中运行单个集成测试?【英文标题】:How do I run a single integration test in grails 3? 【发布时间】:2017-02-07 21:13:51 【问题描述】:Grails 3(至少 3.1.10)在仅运行特定测试方面存在问题。如何让它运行单个集成测试?
【问题讨论】:
【参考方案1】:这是运行单个集成测试的示例命令
grails test-app *LoginFunctional* -integration
如果你把 -integration 标志放在模式之前,test-app 命令将忽略模式并执行所有集成测试。
【讨论】:
这让我最近发疯了。谢谢。 注意左通配符会扩展为完整的包路径,例如com.my.package.LoginFunctionalTest【参考方案2】:官方的命令行语法是grails test-app
,可以选择后跟一个模式来匹配您要测试的完整命名空间类名称,例如org.myorg.ClassToTest
或org.**.*
,以及-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
并在指定的类上运行测试。
【讨论】:
以上是关于如何在 grails 3 中运行单个集成测试?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Angular js 集成到 grails 2.3.4 中?
如何使用 @Build 为 grails 集成测试创建多种类型的测试数据