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

时间:2010-05-25 11:30:15

标签: testing grails groovy integration-testing

是否可以在Grails中快速运行单个/所有集成测试。测试应用程序带来了清除所有已编译文件和生成cobertura报告的沉重包袱,因此即使我们运行单一集成测试,整个代码库也会被编译,检测并生成cobertura报告。对于我们的应用,这需要2分钟以上。

如果可以快速运行一个集成测试并获得快速反馈,那将非常有用。

此外,测试完成后清理所有已编译的文件是否很重要?如果我们运行整套集成测试,这种清理很好,但是如果我们要在一个类中运行一个或两个测试,那么清理和重新编译似乎是一个很大的瓶颈,可以更快地向开发人员提供反馈。

由于

3 个答案:

答案 0 :(得分:15)

如果您有集成测试类

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

您可以使用以下命令在此类中运行一个测试:

grails test-app integration: SimpleController.testLogin

但是,您仍然需要承担集成测试所需的时间损失(加载配置,连接到DB,实例化Spring bean等)。

如果您希望测试快速运行,那么尝试编写单元测试而不是集成测试。

答案 1 :(得分:5)

集成测试的目的是完成整个编译,数据库创建,服务器启动等,因为测试应该在集成环境中运行,顾名思义。

也许你可以为单元测试提取一些测试。这些可以在Eclipse中运行。

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

coverage {
    enabledByDefault = false
}

答案 2 :(得分: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查询)。