是否可以在Grails中快速运行单个/所有集成测试。测试应用程序带来了清除所有已编译文件和生成cobertura报告的沉重包袱,因此即使我们运行单一集成测试,整个代码库也会被编译,检测并生成cobertura报告。对于我们的应用,这需要2分钟以上。
如果可以快速运行一个集成测试并获得快速反馈,那将非常有用。
此外,测试完成后清理所有已编译的文件是否很重要?如果我们运行整套集成测试,这种清理很好,但是如果我们要在一个类中运行一个或两个测试,那么清理和重新编译似乎是一个很大的瓶颈,可以更快地向开发人员提供反馈。
由于
答案 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查询)。