在Grails中创建单元测试时,我应该依赖Config.groovy吗?

时间:2014-07-29 16:37:16

标签: unit-testing grails spock

根据Grails文档

  

单元测试通常在没有物理存在的情况下运行   涉及I / O的资源,如数据库,套接字连接或   文件。

但是,当我使用Grails cmd行工具运行测试时,它包含Config.groovy,这意味着在我测试过的代码中我有......

Integer daysToRetain = grailsApplication.config.com.gleason.assignmentRetentionDays as Integer

这可以正确解析而无需嘲笑它。同样在我的单元测试中,我有以下内容......

import grails.util.Holders
...
Integer daysToRetain = Holders.config.com.gleason.assignmentRetentionDays as Integer

如果不是使用它的约定,为什么grails会加载Config.groovy?还有什么其他文件可以依赖?

2 个答案:

答案 0 :(得分:1)

Grails中的单元测试将引导最低可行的Grails运行时环境。这意味着配置,但不一定要加载与持久性有关的组件或插件(即.hibernate数据源)。

Grails文档没有说明在单元测试期间无法处理配置,因为配置嵌入在项目中。相反,它更多地讲述了在单元测试期间不一定具有运行时服务器本地文件系统资源(尤其是如果您在CI中运行)。

Also, what other files are OK to rely on?

大概是项目中的任何资源。

答案 1 :(得分:1)

我个人会嘲笑它,因为以下原因之一:

如果你进入单元测试的隔离路径,那么显然Config.groovy将不是被测单元。所以这意味着Config.groovy是一个外部依赖,并且让测试不依赖于可能改变的外部依赖是一种好处,因为它不会因错误的Config.groovy更改而中断。

如果你使用grails插件来分解你的grails应用程序,那么你就是有点连线的情况,在测试模式下,你必须在插件中定义你的配置,因为单元测试在插件本地和运行中运行 - 应用程序情况你必须在应用程序中设置它们,因为config.groovy默认情况下不会从插件中公开(这显然不是什么大问题,但无论如何)。

但是我看到的另一点是,通过模拟它,你在测试中明确地表明它,你期望从配置中获得某个路径(如com.gleason.assignmentRetentionDays),否则你会你只需要知道,因为它在你的实现中。

此外,当只读取测试时,更清楚的是,为此特定配置设置设置了什么值。这并非在所有情况下都很重要,但有时在阅读测试时可能会很高兴。