繁体   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