如何在 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.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 并在指定的类上运行测试。

【讨论】:

以上是关于如何在 grails 3 中运行单个集成测试?的主要内容,如果未能解决你的问题,请参考以下文章

Grails 2.0 集成测试污染?

如何将 Angular js 集成到 grails 2.3.4 中?

如何使用 @Build 为 grails 集成测试创建多种类型的测试数据

如何在 maven 的集成测试目标中运行单个测试

Grails Connections 在集成测试中的行为非常不同

如何在 Grails 2.0 服务中对 i18n 注入 messageSource 的使用进行单元或集成测试