【问题标题】:How to mock a method with a return value if there is a void method inside this method如果此方法中有 void 方法,如何模拟具有返回值的方法
【发布时间】:2021-03-02 23:43:53
【问题描述】:

我正在测试一个具有可测试方法(下面的方法本身)和返回值的类。 使用 Mockito 我遇到了问题。 void方法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 方法位于具有返回值的方法中。

【问题讨论】:

  • 你在哪里嘲笑roomDao
  • 如果你想模拟SimRepo,为什么用new SimRepo()而不是Mockito.mock(SimRepo.class)来初始化呢?
  • @Smutje 问题已解决,感谢您的宝贵时间。

标签: java android junit mockito


【解决方案1】:

尝试使用 Mockito 的 mock 方法来模拟它,而不是 new SimRepo()

@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);

【讨论】:

  • 这对我有用,谢谢。但是你能再告诉我一件事吗?如何检查 getData() 方法内部是否调用了方法以及调用了多少次?
  • 非常感谢!
  • 乐于助人
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
  • 2016-03-21
  • 1970-01-01
相关资源
最近更新 更多