2014-10-27 50 views
0

我需要一些幫助來爲服務層中的以下方法編寫測試。我不確定如何在Mockito中爲這項服務模擬這些方法(在DAO以及相同的服務層中)。在此之前,我認爲我應該嘲笑整個循環,以避免嘲笑每種方法。爲這種方法編寫單元測試的正確方法是什麼?編寫服務功能的單元測試

public List<CheckupHistoryDto> getCaseHistory(Individual patient, Individual doctor) { 
    List<CheckupHistoryDto> checkupHistoryList = new ArrayList<ClaimHistoryDto>(); 
    List<CaseHistory> caseHistoryIds = caseDetailDao.fetchCaseIds(patient.getId(), doctor.getId()); 
    for(CaseHistory caseHistory : caseHistoryIds) { 
     CheckupHistoryDto checkupHistoryDto = new CheckupHistoryDto(); 
     checkupHistoryDto.setDateOfCall(formatter.format(caseHistory.getCreateDate())); 
     checkupHistoryDto.setPatientInfo(getPatientInfo(patient)); 
     checkupHistoryDto.setDoctorInfo(getDoctorInfo(doctor)); 
     checkupHistoryDto.setServiceProvided(caseDetailDao.fetchServiceHistory(caseHistory.getEventId())); 
     checkupHistoryList.add(checkupHistoryDto); 
    } 
    return checkupHistoryList; 
} 

public Patient getPatientInfo(patient) { 
    ... 
} 

public Doctor getDoctorInfo(doctor) { 
    ... 
} 

我的測試用例

@Test 
public void testHistoryList() { 
    Individual patient = Mockito.mock(Individual.class); 
    Individual doctor= Mockito.mock(Individual.class); 
    List<CheckupHistoryDto> checkupHistory = caseService.getCaseHistory(patient, doctor); 
    assertEquals(MOCK_LIST_SIZE, checkupHistory.size()); 
} 

回答

1

忘掉「嘲諷for循環」,這是沒有意義的,因爲它是你要測試的部分功能;具體來說,當你單元測試XQ類時,你絕不會嘲笑類XQ的任何部分。

你需要模擬如下:

  1. Individual.getId的病人。
  2. Individual.getId爲醫生。
  3. 對於患者,使用getPatientInfo方法的Individual類中的任何方法。
  4. 對於醫生,使用getDoctorInfo方法的Individual類中的任何方法。
  5. caseDetailDao.fetchCaseIDs
  6. caseDetailDao.fetchServiceHistory
  7. caseHistory.getCreateDate,如果返回從fetchCaseIds模擬對象的列表。
  8. caseHistory.getEventId,如果你從fetchCaseIds返回一個模擬對象列表。

你有一些可怕的代碼:

  1. caseHsitory.fetchCaseIds顯然沒有返回caseIDs,它返回情況的詳細信息。