在Grails中快速运行单个集成测试

9
在Grails中,是否有可能快速运行单个/所有集成测试类的测试?test-app会清除所有已编译文件并生成cobertura报告,因此即使我们只运行单个集成测试,整个代码库也会被编译、插桩并生成cobertura报告。对于我们的应用程序,这需要超过2分钟的时间。
如果能够快速运行一个集成测试并获得快速反馈,那将非常有帮助。
另外,完成测试后清理所有编译文件是否很重要?如果我们只运行类中的一两个测试,这种清理和重新编译似乎是更快地向开发人员提供反馈的一个大瓶颈。
谢谢。
3个回答

15

如果您有一个集成测试类

class SimpleControllerTests extends GrailsUnitTestCase {
    public void testLogin() {}
    public void testLogin2() {}
    public void testLogin3() {}
}

您可以使用以下方式仅运行此类中的一个测试:

grails test-app integration: SimpleController.testLogin

然而,你仍需要承担集成测试所需的时间惩罚(加载配置,连接数据库,实例化Spring beans等)

如果你想让你的测试运行得更快,请尝试编写单元测试而不是集成测试。


运行一个测试示例可以工作,只需要完整的类路径即可。 - Bill Comer

5

集成测试的目的是为了在一个整合的环境下进行编译、数据库创建、服务器启动等操作,因为测试应该在集成环境中运行,正如其名称所示。

您可以将一些测试提取为单元测试。这些测试可以在Eclipse中运行。

您可以通过将以下代码放置在grails-app/conf/BuildConfig.groovy中来关闭Cobertura:

coverage {
    enabledByDefault = false
}

Cobertura实际上存在问题。我们使用了Cobertura插件,插件在生成报告后清理了所有已编译的源代码,这阻止了我们利用增量编译所带来的所有好处。此外,对于我们而言,运行一两个测试并不需要全面的Cobertura报告,一旦禁用它,集成测试就可以快速运行。感谢您的指引。 - Prakash

0

就像你所说的,大部分时间都是用来设置应用程序环境、注入bean和进行动态类注释。通过在Grails REPL中运行测试,您可以通过仅加载一次来加快集成测试周期。

然而,这样做的代价是REPL中存在动态重新加载问题。如果您看到随机的奇怪现象,请退出REPL并重新加载。

$> ./grailsw --plain-output
|Loading Grails 2.5.3
|Configuring classpath
|Enter a script name to run. Use TAB for completion: 
grails> test-app -integration
... (loads some things)
...
grails> test-app -integration
... (faster loading)

回复其他评论者 - 集成测试也是有用的,有些代码无法通过单元测试进行测试(例如,测试HQL或SQL查询)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接