【发布时间】:2020-08-03 10:43:10
【问题描述】:
只有第一个 Mokcito.when 在这里工作,导致它返回 null,而不是对象。
当服务方法内部调用了两个 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);
}
道
@Override
public EmergencyComplaint findById(long id) {
return emergencyComplaintRepository.findById(id).orElse(null);
}
@Override
public EmergencyComplaint save(EmergencyComplaint emergencyComplaint) {
return emergencyComplaintRepository.save(emergencyComplaint);
}
【问题讨论】:
-
第二个 when 语句可以省略,因为默认情况下 mock 总是返回 null。
-
请更改断言的参数顺序。第一个参数是您的预期结果,第二个参数是实际结果。您当前的订单令人困惑。
-
请说明您是如何定义模拟的。您的 @Before-method 也可能会有所帮助。
-
我复制了错误的代码,第二个模拟应该返回editedComplaint。就@Before-method 而言。我没有
标签: spring spring-boot spring-data-jpa spring-test