如何模拟对具有不同参数值的相同函数的调用以具有两个不同的值?

时间:2018-01-17 14:24:19

标签: unit-testing mockito

我有一个如下定义的功能 -

public void doesSomething()
{
     boolean someAsssertion;
     if(callsMethodinAnotherClass(parameter1))
     {
      do something
     }
     else if(callsMethodinAnotherClass(parameter2))
     {
      do something
     }
}

我想编写一个模拟“callsMethodinAnotherClass(..)”的测试用例;首先使用parameter1,然后使用parameter2,以测试两个块中的代码。如果我设置一次值(比如参数1),我不知道如何在它到达其他部分之前将其反转

1 个答案:

答案 0 :(得分:0)

假设参数类型为String。你可以这样做

final ArgumentCaptor<String> argumentCaptor = ArgumentCaptor.forClass(String.class);

    doAnswer(invocation -> {
                String value = argumentCaptor.getValue();
                if(value.equals("parameter1")
                    return something;
                if(value.equals("parameter2")
                    return somethingElse;
      }).when(mockedObject).callsMethodinAnotherClass(argumentCaptor.capture());