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()来尝试模拟orderManagementServiceProvider.getOrderManagementService()。attestResults()。
这是方法orderManagementServiceProvider.getOrderManagementService()。attestResults,
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);
答案 0 :(得分:1)
测试代码(剪切)中的相关行是:
orderManagementServiceProvider.getOrderManagementService() .attestResults(attestIds, RequestSpeciality.valueOf(speciality.toString()));
由于违反了 Demeter法(不要与陌生人交谈!),你必须同时模仿:OrderManagementService
和{{1}的实例}。然后你必须配置后者的模拟,以便在调用OrderManagementServiceProvider
时返回第一个模拟。
但是,getOrderManagementService()
仅适用于 spy 上的doNothing()
方法(依赖项的包装具体实例)。无论如何, mock 上的void
方法都不会被调用。
如果您的方法具有返回值,则必须使用void
(或doReturn()
),以便切割可以对方法结果起作用。默认情况下,Mockito将分别返回doThrow()
,null
或0
。
警告:
表单false
执行调用mocked方法(并抛弃其结果)。如果方法访问模拟中其他未配置的方法返回的成员变量或对象,则可能导致NPE。