【问题标题】:Grails 2.1.x Controller Unit Testing with services带有服务的 Grails 2.1.x 控制器单元测试
【发布时间】:2013-03-14 19:22:32
【问题描述】:

尝试对 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")
 }

我尝试在调用控制器之前设置一个模拟视图并检查响应文本,但它从未超过对控制器的调用,因为它仍在尝试处理模板。在这一点上,我不知道如何测试这个控制器功能,或者是对象的架构不正确;这似乎有点过于复杂了。

【问题讨论】:

    标签: unit-testing service controller mocking grails-2.0


    【解决方案1】:

    答案是在约束测试完全被模拟 GORM 保存之前模拟事物。我猜 mockForConstraintsTests 并没有像我预期的那样发挥作用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-07
      • 1970-01-01
      • 2014-09-14
      • 1970-01-01
      • 2015-09-20
      相关资源
      最近更新 更多