Java 从src/groovy中的spock单元测试代码访问grailsApplication

Java 从src/groovy中的spock单元测试代码访问grailsApplication,java,unit-testing,grails,groovy,spock,Java,Unit Testing,Grails,Groovy,Spock,我正在尝试使用Spock测试src/groovy中的一些代码。我正在测试的代码引用了grailsApplication。因为它在src/groovy中,所以我使用依赖注入将grailsApplication注入bean,如下所示: ticketRequestEmailInfo(TicketRequestEmailInfo) { grailsApplication = ref('grailsApplication') } 我遇到的问题是,当测试代码碰到引用grailsApplicatio

我正在尝试使用Spock测试src/groovy中的一些代码。我正在测试的代码引用了grailsApplication。因为它在src/groovy中,所以我使用依赖注入将grailsApplication注入bean,如下所示:

ticketRequestEmailInfo(TicketRequestEmailInfo) {
    grailsApplication = ref('grailsApplication')
}
我遇到的问题是,当测试代码碰到引用grailsApplication的代码行时,我得到一个NullPointerException:

java.lang.NullPointerException: Cannot get property 'config' on null object
我的测试类具有以下功能:

@TestMixin(GrailsUnitTestMixin)
class TicketRequestEmailInfoSpec extends Specification {
    def setup() {
        grailsApplication.config.acme.purchase.trsUrlBase = "http://localhost:8082/purchase/order/"
}

有人有什么建议吗?

试试Holders.grailsApplication.config:

@TestMixin(GrailsUnitTestMixin)
class TicketRequestEmailInfoSpec extends Specification {
    def setup() {
        Holders.grailsApplication.config.acme.purchase.trsUrlBase = "http://localhost:8082/purchase/order/"
}

注入
grailsApplication
作为
def grailsApplication
进行测试时不起作用

您还可以将其导入为
将静态grails.util.Holders.config导入为grailsConfig

然后将其用作

@TestMixin(GrailsUnitTestMixin)
class TicketRequestEmailInfoSpec extends Specification {
    def setup() {
        grailsConfig.acme.purchase.trsUrlBase = "http://localhost:8082/purchase/order/"
}

在测试中使用def grailsApplication会产生NullPointerException。一定是因为我正在测试的代码是src/groovy。不过,按照上面的建议使用Holders.grailsApplication.config是可行的。