首页 > 解决方案 > 如果此方法中有 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 方法位于具有返回值的方法中。

标签: javaandroidjunitmockito

解决方案


而不是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);

推荐阅读