2015-06-06 63 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