使用donothing()作为莫科托(Mockito)返回类型的方法


public void attestResults(List<OMInvestigationResultMutableDTO.Id> resultIds, OMRequestSpeciality speciality)
{
  List<Answer.Id> attestIds = new ArrayList<Answer.Id>();
  for (OMInvestigationResultMutableDTO.Id id : resultIds)
  {
    Answer.Id answerId = answerIdFactory.createId(id.getValue(), null);
    attestIds.add(answerId);
  }
  orderManagementServiceProvider.getOrderManagementService()
    .attestResults(attestIds, 
  RequestSpeciality.valueOf(speciality.toString()));
}

我的问题是如何为AttestResults编写单元测试((。我想尝试使用Mockito中的Donothing((。

这是Method OrderManagementserviceProvider.getOrderManagementService((。

public List<Id> attestResults(List<Id> answerIds, RequestSpeciality speciality) {
    this.accessHandler.checkAccess(AccessRights.ATTEST_RESULTS);
    ArgumentValidator.argument(answerIds, "AnswerIds").notNull().notEmpty();
    ArgumentValidator.argument(speciality, "Speciality").notNull();
    ResultCreator resultCreator = new ResultCreator(this.resultToolkitAdapter, this.pathologyReportToolkitService);
    return resultCreator.attestResults(answerIds, speciality);
}

在这种情况下,我无权使用PowerMockito。

我嘲笑 when(orderManagementServiceProvider.getOrderManagementService()).thenReturn(omService);

您正在测试的代码中的相关行(剪切(是:

orderManagementServiceProvider.getOrderManagementService()
   .attestResults(attestIds,
                  RequestSpeciality.valueOf(speciality.toString()));

由于违反了demeter的法律(不要与陌生人说话!(,您必须嘲笑这两个:OrderManagementServiceOrderManagementServiceProvider的实例。然后,您必须配置以后的模拟,以返回getOrderManagementService()时第一个模拟。

但是, doNothing()仅适用于 spy s(依赖关系的包装混凝土实例(上的void方法。无论如何,模拟 s上的void方法均未调用。

如果您的方法具有返回值,则必须使用doReturn()(或doThrow()(,以便剪切可以对方法结果作用。默认情况下,Mockito将分别返回null0false


警告:

表格when(dependency.someMethodWithReturnValue()).thenReturn() di 调用模拟方法(并抛弃其结果(。如果该方法访问Mock中其他未配置的方法返回的成员变量或对象。

,这可能会导致NPE。

powermockito仅在要模拟静态类时才使用。通过看这个,

orderManagementServiceProvider.getOrderManagementService()
.attestResults(attestIds, 

requestspeciality.valueof(procepority.tostring((((;

它看起来不像静态类。

orderManagementServiceProvider = mock(OrderManagementServiceProvider.class);
doNothing().when(orderManagementServiceProvider).getOrderManagementService.attestResults(any(),any());

最新更新