2015-06-06 64 views
0

我有一个控制器测试问题。我试图嘲笑一个服务方法的返回值,但它不返回一个特定的对象并且无论如何调用服务方法。 测试法:无法模拟服务的返回值

def "shouldReturnStatus"() { 
    given: 
    controller.repairService.getRepair('123465') >> repair; 
    when: 
    controller.status(); 
    then: 
    response.text == '{"currentStatus":"Repair was found.","repairFound":true}' 
} 

修复模拟在设置方法声明。

主计法:

def status() {  
    String repairCode = params.repairCode; 
    if(repairCode == null || repairCode.isEmpty()) { 
     log.info("REPARATURSTATUSABFRAGE: Reparaturcode wurde nicht angegeben") 
     renderEmptyRepairCode(); 
    } else if(repairService.getRepair(repairCode)) { 
     Repair repair = repairService.getRepair(repairCode); 
     if(repair) { 
      log.info("REPARATURSTATUSABFRAGE: Reparaturstatus mit Code " + repairCode + " erfolgreich ausgegeben.") 
      Customer customer = repair.getCustomer(); 
      renderRepairStatus(repair, customer); 
     } 
    } else { 
     log.info("REPARATURSTATUSABFRAGE: Reparatur mit Code " + repairCode + " nicht gefunden.") 
     renderRepairNotFound(repairCode); 
    }  
} 

的REPAIRSERVICE法:

def getRepair(String repairCode) {  
    Repair repair = Repair.findByRepairCode(repairCode); 
    if(repair == null) { 
     String upperCaseRepairCode = repairCode.toUpperCase(); 
     repair = Repair.findByRepairCode(upperCaseRepairCode); 
    }  
    return repair;  
} 

我嘲笑REPAIRSERVICE在设置法

repairService = Mock(RepairService); 

我觉得代码的服务方法并不重要,因为我嘲笑了这种方法的返回值。或者我理解错了什么?

回答

0

您需要修改您的测试:

def "shouldReturnStatus"() { 
    given: 
    controller.repairService = Mock(RepairService) 
    controller.repairService.getRepair('123465') >> repair 

    when: 
    controller.status(); 
    then: 
    response.text == '{"currentStatus":"Repair was found.","repairFound":true}' 
} 

如果我解释型模拟(REPAIRSERVICE)的你的问题吧,你已经创建了规格内的实例变量。这并不意味着你的控制器会使用这个模拟服务。您需要将其分配给控制器。

+0

非常感谢。这工作。 – chrischib