Mockito有几个论点的条件

时间:2016-08-29 10:48:16

标签: java unit-testing mockito

我正在尝试模拟方法的结果。结果应该有两种变体:

Mockito.when(class.method(a,b)).thenReturn(c);
  • 如果a-b等于20
  • 如果a-b不是20。

如何编写两个不同的语句并返回不同的结果?

P.S。我知道如何为一个参数使用条件。例如:

class MyCondition extends ArgumentMatcher<AClass> {
    public boolean matches(Object sd) {
           boolean toReturn = (sd instanceof AClass) && (sd >15);
           return toReturn;
           }
    } 


Mockito.when(class.method(Mockito.argThat(new MyCondition()),b)).thenAnswer(
    new Answer<BClass>() {
        public BClass answer(InvocationOnMock invocation) {
             return new BClass();
        }
    });

但是如何为TWO方法参数构建条件?

1 个答案:

答案 0 :(得分:3)

使用Answer

Mockito.when(instance.method(Mockito.anyInt(), Mockito.anyInt()))
    .thenAnswer(
        new Answer<Integer>() {
          @Override public Integer answer(InvocationOnMock invocation) {
            int a = (Integer) invocation.getArguments()[0];
            int b = (Integer) invocation.getArguments()[1];
            if (a - b == 20) {
              return ...;
            } else {
              return ...;
            }
          }
        });