[英]Grails: Utility class for tests that needs handle to grailsApplication.config
[英]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.