多个 Mockito.when 无法在同一个 class 上工作

Multiple Mockito.when not working on same class

只有第一个 Mokcito.when 在这里工作,导致它 return 为 null,而不是对象。

我 return 两次,因为在服务方法中调用了两个 JPA 函数。

@Test
public void testEditComplaintStatusDetail() {

    long id = 1;
    String status = "Investigation Complete";
    EmergencyComplaint editedComplaint = new EmergencyComplaint(id, "No dogs to feed", "Investigation Complete");

    when(emergencyComplaintRepository.findById(id)).thenReturn(Optional.of(emergencyComplaint));
    when(emergencyComplaintRepository.save(editedComplaint)).thenReturn(editedComplaint);

    assertEquals(emergencyComplaintService.editComplaintStatusDetails(status, id), editedComplaint);
}

服务

@Override
public EmergencyComplaint findComplaintDetailsById(long id) {
    return emergencyComplaintDAO.findById(id);
}

@Override
public EmergencyComplaint editComplaintStatusDetails(String status, long id) {
    EmergencyComplaint complaint = findComplaintDetailsById(id);
    complaint.setStatus(status);
    return emergencyComplaintDAO.save(complaint);
}

DAO

@Override
public EmergencyComplaint findById(long id) {
    return emergencyComplaintRepository.findById(id).orElse(null);
}


@Override
public EmergencyComplaint save(EmergencyComplaint emergencyComplaint) {
    return emergencyComplaintRepository.save(emergencyComplaint);
}

编辑后更新:

如果您的 EmergencyComplaint 对象不等于您的 editedComplaint 对象,您对 save() 的模拟将不起作用。因此,您必须更改(或至少显示)您的 equals 函数或扩大您预期的模拟参数,如下所示:

when(emergencyComplaintRepository.save(Mockito.any())).thenReturn(editedComplaint);