我应该依赖配置吗?在Grails中创建单元测试时使用groovy



根据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加载配置文件。如果使用Groovy不是一种惯例呢?另外,还有哪些文件是可以依赖的?

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

Grails文档没有提到在单元测试期间无法获得配置的句柄,因为配置嵌入在项目中。相反,它更多地说明在单元测试期间不必拥有运行时服务器-本地文件系统资源(特别是如果您在CI中运行)。

Also, what other files are OK to rely on?

可能是项目中的任何资源

我个人会模仿它,因为以下原因之一:

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

如果你使用grails插件来分解你的grails应用程序,那么你就会遇到一些奇怪的情况,在测试模式下,你必须在插件中定义你的配置,因为单元测试在插件本地运行,而在运行应用程序的情况下,你必须在应用程序中设置它们,因为配置。默认情况下,Groovy不会从插件中暴露出来(这显然不是什么大问题,但无论如何)。

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

另外,当只读取测试时,为这个特定的配置设置设置的值变得更加清楚。这并不是在所有情况下都很重要,但有时在阅读测试时知道这一点是很好的。

最新更新