java - 如果此方法中有 void 方法,如何模拟具有返回值的方法
问题描述
我正在测试一个具有可测试方法(下面的方法本身)和返回值的类。使用 Mockito 我遇到了问题。无效方法 roomDao.updateData(outData); 的问题
public IEntity getData(SimBasket<DataEntity, SimRequest> request) {
Entity outData = converterData.convertNetToDatabase(request);
roomDao.updateData(outData);
return outData;
}
这是我的测试代码:
@Test
public void getData() {
simRepo = new SimRepo();
Mockito.when(simRepo.getData(request)).thenReturn(new Entity());
}
错误日志:
org.mockito.exceptions.misusing.CannotStubVoidMethodWithReturnValue: 'updateData' 是一个void 方法,不能用返回值存根!Voids 通常用 Throwables 进行存根:doThrow(exception).when(mock).someVoidMethod();
我似乎不太明白如何解决这个问题,因为 void 方法位于具有返回值的方法中。
解决方案
而不是new SimRepo()
尝试使用 Mockito 的模拟方法来模拟它:
@Test
public void getData() {
SimRepo simRepo =Mockito.mock(SimRepo.class);
Mockito.when(simRepo.getData(request)).thenReturn(new Entity());
}
更新:如果您还想计算此模拟方法调用的次数,请使用:
// this will check if mock method getData() with parameter `request` called exactly 1 times or not.
Mockito.verify(simRepo, Mockito.times(1)).getData(request);
推荐阅读
- reactjs - React(非本地)询问相机权限
- python - 由 python 脚本完成的 mkimage 函数将标头添加到二进制文件(uboot 映像)
- python - 调整construct()函数
- amazon-web-services - AWS LightSail RDS - 我需要多少 RAM
- javascript - 在 JavaScript 中使用电子邮件触发器扩展程序 firebase
- ruby-on-rails - 使用 active_median 按自定义聚合函数排序
- matlab - matlab非线性方程
- ios - 如何在 Swift 中定义指向另一个具有相同类型的结构的通用结构?
- django - 为 django 组设置权限
- python - 由于服务器响应缓慢,python 代码没有响应