gpt4 book ai didi

java - 在mockito中使用doNothing()作为返回类型的方法

转载 作者:行者123 更新时间:2023-12-02 02:49:34 25 4
gpt4 key购买 nike

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。

我 mock 了 when(orderManagementServiceProvider.getOrderManagementService()).thenReturn(omService);

最佳答案

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

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

由于违反了德米特定律(不要与陌生人说话!),您必须模拟两者:OrderManagementService 的实例和OrderManagementServiceProvider。然后,您必须配置后者的模拟,以便在调用 getOrderManagementService() 时返回第一个模拟。

但是,doNothing() 仅适用于 spy(依赖项的包装具体实例)上的 void 方法。 mock 上的 void 方法无论如何都不会被调用。

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

<小时/>

警告:

表单 when(dependency.someMethodWithReturnValue()).thenReturn() 确实调用模拟方法(并丢弃其结果)。如果该方法访问模拟中其他未配置的方法返回的成员变量或对象,则可能会导致 NPE。

关于java - 在mockito中使用doNothing()作为返回类型的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48989739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com