Mockito仅在第二次调用方法时返回值

Jon*_*Jon 0 java unit-testing mockito

在下面的简单示例中,我想知道如何仅在使用 Mockito 第二次调用nameManager后才返回名称?nameManager.getName()(我知道我还可以做其他事情,比如嘲笑什么saveName()

我想过使用doAnswer(),但我不知道如何确定何时nameManager.getName()被调用两次。

public void saveName(String name) {
  boolean doesNameExist = nameManager.getName(name).isPresent();
  if (!doesNameExist) {
    saveName(name);
    if (!nameManager.getName(name).isPresent()) {
      throw new Exception("Cannot verify name has been saved");
    }
  }
}

Run Code Online (Sandbox Code Playgroud)

小智 8

在单元测试中,您只需添加 then 子句两次即可。像这样 -

@Test
public void yourUnitTest(){
    when(nameManager.getName(anyString())
        .thenReturn(null)
        .thenReturn(someValue);
    // your test
}
Run Code Online (Sandbox Code Playgroud)

仅当第二次调用时才会返回值,第一次调用时将返回 null。