繁体   English   中英

运行所有集成测试时,grailsApplication 在域类中不可用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM