【问题标题】:Multiple Mockito.when not working on same class多个 Mockito.when 不在同一个班级工作
【发布时间】: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


【解决方案1】:

编辑后更新:

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

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

【讨论】:

  • 我的错,它应该返回editedComplaint。从ide复制了错误的一个。你现在可以再检查一下吗?
  • 啊,对象必须相同。好的
猜你喜欢
  • 1970-01-01
  • 2018-01-16
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多