簡體   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