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的法律(不要与陌生人说话!(,您必须嘲笑这两个:OrderManagementService
和OrderManagementServiceProvider
的实例。然后,您必须配置以后的模拟,以返回getOrderManagementService()
时第一个模拟。
但是, doNothing()
仅适用于 spy s(依赖关系的包装混凝土实例(上的void
方法。无论如何,模拟 s上的void
方法均未调用。
如果您的方法具有返回值,则必须使用doReturn()
(或doThrow()
(,以便剪切可以对方法结果作用。默认情况下,Mockito将分别返回null
,0
或false
。
警告:
表格when(dependency.someMethodWithReturnValue()).thenReturn()
di 调用模拟方法(并抛弃其结果(。如果该方法访问Mock中其他未配置的方法返回的成员变量或对象。
powermockito仅在要模拟静态类时才使用。通过看这个,
orderManagementServiceProvider.getOrderManagementService()
.attestResults(attestIds,
requestspeciality.valueof(procepority.tostring((((;
它看起来不像静态类。
orderManagementServiceProvider = mock(OrderManagementServiceProvider.class);
doNothing().when(orderManagementServiceProvider).getOrderManagementService.attestResults(any(),any());