0
我在單元測試中使用兩個mockDomain。當我只啓動一個UT(使用grails test-app -unit MyTest)時,測試通過,但如果我啓動整個測試套件(grails test-app -unit),那麼定義了兩個mockDomain的測試失敗。grails mockDomain()在測試和所有測試套件上運行時的不同行爲
一次啓動一次或整個套件啓動時,測試運行的方式是否有所不同?
我的代碼示例:
void testSaveTranslation_ok() {
mockDomain(Translation)
mockDomain(HelpSubject, [new HelpSubject(name_fr: "subject")])
assertEquals(1, HelpSubject.count())
HelpSubject helpSubject = HelpSubject.findAll().get(0)
assertNull(helpSubject.name)
def translation = new Translation(defaultVal:"defaultVal", enVal: "enVal", frVal: "frVal", meta: "helpSubject#name#${helpSubject.id}")
assertEquals(0, Translation.count())
translationService.saveTranslation(translation)
assertEquals(1, Translation.count())
assertNotNull(helpSubject.name)
}
問候,
大衛。
如果我這樣做(請糾正我,如果我錯了),我的翻譯實例將被保存,以便在斷言(0,Translation.count( )) 將失敗。此測試的關注點是驗證翻譯方法translationService.saveTranslation(translation)有效地保存翻譯。 – David
我認爲你是正確的,但這就是你想要的。在Grails中,您實際上不必調用Domain對象的save()方法。如果你的對象被附加到會話中,參與一個事務並且是骯髒的(或新的),無論你是否調用save(),它都將被持久化。現在你的情況你不關心,你只是想測試saveTranslation(),不管它做什麼。請記住,mockDomain的範圍是有限的,並且不會包含所有的靜態方法,例如,如果需要,你將不得不對meta進行編程。 – dbrin