多个 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);
只有第一个 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);