运行所有集成测试时,在class类中不能使用grailsApplication

时间:2015-09-25 10:49:46

标签: grails testing integration-testing

我在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没有被注入到域类中。有没有人遇到过这个问题?

据我所知,它似乎是一个测试污染问题,但由于每次集成测试都没有设置,因此很难找到问题。

3 个答案:

答案 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 <>从而导致了问题。