簡體   English   中英

Grails 2.1.x控制器單元測試與服務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM