我在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
没有被注入到域类中。有没有人遇到过这个问题?
据我所知,它似乎是一个测试污染问题,但由于每次集成测试都没有设置,因此很难找到问题。
答案 0 :(得分:1)
我遇到了grails 3这个问题。如果要测试域,则必须在测试开始时进行设置(使用spock进行测试):
def setup() {
Holders.grailsApplication = new DefaultGrailsApplication()
Holders.grailsApplication.config.property.code = '1234'
}
答案 1 :(得分:0)
我不确定问题是什么,但这必须是一个测试污染问题,你的任何一个测试用例都是使用meta class对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
}
}
这样,您不依赖于依赖注入。
答案 2 :(得分:0)
我遇到了同样的问题,发现我的Integrationstest实现了ServiceUnitTest <>从而导致了问题。