![](/img/trans.png)
[英]Grails: Utility class for tests that needs handle to grailsApplication.config
[英]grailsApplication not available in Domain class when running all Integration tests
在 Grails 中运行集成测试时遇到问题。 项目中的域类之一具有访问grailsApplication.config
属性的方法。 我们对在域类中调用此方法的服务之一进行了集成测试。 当测试使用命令自行运行时
grails test-app integration: com.project.MyTestSpec
测试运行良好,域类可以访问grailsApplication
。 但是,当整个测试套件运行时:
grails test-app integration
然后测试失败并出现错误
java.lang.NullPointerException: Cannot get property 'config' on null object
尝试访问grailsApplication.config
。 似乎当所有测试一起运行时grailsApplication
没有被注入到域类中。 有没有人遇到过这个问题?
从我读到的内容来看,这似乎是一个测试污染问题,但由于每个集成测试中都没有进行设置,因此很难找到问题所在。
我在 grails 3 中遇到了这个问题。如果您正在测试域,则必须在测试开始时进行设置(使用 spock 进行测试):
def setup() {
Holders.grailsApplication = new DefaultGrailsApplication()
Holders.grailsApplication.config.property.code = '1234'
}
我不确定问题是什么,但这一定是一个测试污染问题,您的任何一个测试用例都使用元类对grailsApplication
执行某些grailsApplication
。 因为这对我来说似乎很好用。
作为一种解决方法,您可以避免使用注入的grailsApplication
并使用Holders
类,如下所示:
package com
import grails.util.Holders
class User {
// def grailsApplication
String email
String name
String getTitle() {
return Holders.getConfig()["app.title.prefix"] + name
// Or
//return Holders.grailsApplication.config["app.title.prefix"] + name
}
}
这样,您就不会依赖于依赖注入。
我遇到了同样的问题,发现我的集成测试实现了导致问题的 ServiceUnitTest<>。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.