写服务功能的单元测试

时间:2014-10-27 14:24:18

标签: java unit-testing

我需要一些帮助来为服务层中的下面的方法编写测试。我不知道如何在Mockito中为这项服务模拟这些方法(在DAO中以及在相同的服务层中)。在此之前,我认为我应该模拟整个for循环,以避免模拟每个方法。为这种方法编写单元测试的正确方法是什么。

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 个答案:

答案 0 :(得分:1)

忘记“模拟for循环”,这没有任何意义,因为它是你想要测试的功能的一部分;特别是,当您对XQ类进行单元测试时,您永远不会模拟XQ类的任何部分。

你需要嘲笑以下内容:

  1. 患者的Individual.getId。
  2. Individual.getId for the doctor。
  3. getPatientInfo方法为患者使用的Individual类中的任何方法。
  4. getDoctorInfo方法使用的Individual类中的任何方法,对于医生来说。
  5. caseDetailDao.fetchCaseIDs
  6. caseDetailDao.fetchServiceHistory
  7. caseHistory.getCreateDate,如果从fetchCaseIds返回模拟对象列表。
  8. caseHistory.getEventId,如果从fetchCaseIds返回模拟对象列表。
  9. 你有一些可怕的代码:

    1. caseHsitory.fetchCaseIds显然没有返回caseIDs,它返回案例详细信息。