Home > Enterprise >  Mockito return value only when method is called for second time
Mockito return value only when method is called for second time

Time:11-26

In my simple example below, I am wondering how I can get nameManager to return a name only after nameManager.getName() is called for the second time with Mockito? (I know there are other things I can do, such as mocking what saveName() does)

I thought about using doAnswer(), but I don't know how to determine when nameManager.getName() has been called twice.

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");
    }
  }
}

CodePudding user response:

In your unit test you can simply add the then clause twice. Like this -

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

This will only return value when called second time and it will return null first time around.

  • Related