[英]Grails 2.1.x Controller Unit Testing with services
嘗試對Grails 2.1.x控制器進行單元測試,該控制器調用模板以顯示具有狀態的歷史項列表。 該控制器在手動測試中工作正常,但是試圖使事情自動化,而我在這方面陷入困境。 我們問題的一部分可能是域對象設計過度。
此測試的設置可能是更多的集成而不是單元測試,但是我不確定是否可以不使用它來測試功能。
控制器操作通過createCriteria查詢生成歷史項列表。 此列表將傳遞到要渲染的模板。
def loadHistValues(){
def histDomainObject = new historyDom()
def elements = histDomainObject.createCriteria().list(max: params.max, offset: params.offset)
render (template: 'searchResults', model:[elements: elements]
}
該模板具有在列表中循環訪問的代碼,將值放入每一列。 這些項目之一是getStatus()。 這將調用實用程序服務以返回值。
def getStatus(){
return historyUtillityService.getStatus(this)
}
該服務獲取最新的歷史記錄事件並返回值。
def getStatus(HistoryDom hist){
def histStatus = HistoryEvent.createCriteria().get(
maxResults(1)
order('id', 'desc')
eq('historyDom', hist)
)
if (histStatus == null)
return 0
else
return histStatus.status
}
調用getStatus()時,我得到了一個空指針。
我已經設置了模擬域對象和模擬服務,但是我不確定它們是否已經降到這個水平,或者我可能稱它們錯誤。
@TestFor (HistoryController)
@MockFor (HistoryDom, HistoryEventDom)
class HistoryControllerTests{
def util = new UnitTestUtil()
void testLoadHistValues(){
def mockHistoryUtilityService = mockfor (HistoryUtilityService)
mockHisotryUtilityService.demand.getStatus (-> return Status.QUEUED)
def histObj1 = util.initMockHistObj(1)
def histObj2 = util.initMockHistObj(2)
histObj1.save()
histObj2.save()
def mockHistEvent = new HistEvent(
histDate: histObj1.getHistDate(),
histObj: histObj1,
histStatus: Status.QUEUED
)
mockHistEvent.save()
controller.loadHistValues()
assert response.text contains("Something worth testing")
}
我嘗試在調用控制器之前設置一個模擬視圖,並為此檢查響應文本,但是由於它仍在嘗試處理模板,因此它永遠不會超出對控制器的調用。 在這一點上,我對於如何測試此控制器功能還是茫然無知,或者該對象的構造不正確; 這似乎有點復雜。
答案是在進行約束測試之前要對模擬事物進行模擬,然后再由模擬GORM完全保存。 我猜想mockForConstraintsTests的功能很正常
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.