2016-08-29 24 views
1

私はメソッドの結果を模擬しようとしています。 a-bは、私は2つの異なる文を書くために達成し、異なる結果を返すことができますどのように20 いくつかの引数のためのMockito条件

ない場合

Mockito.when(class.method(a,b)).thenReturn(c); 
  • a-b場合は20
  • に等しい:結果の2つのバリエーションがあるはずです?

    P.S.私は1つの引数の条件をどのように使用するかを知っています。例:

    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メソッド引数の条件をどのように構築できますか?

+0

たぶんここで使用するのに最適なツールではありませんmockito。いつでもクラスを拡張し、必要なif文でメソッドをオーバーライドすることができます。 – byxor

+0

あなたのロジックをエンコードするのに 'Answer'を使うことができます。 –

+0

このメソッドを正確に使用するクラスをテストし、メソッドの動作をシミュレートしたいと思います。 – user2957954

答えて

2

使用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 ...; 
      } 
      } 
     }); 
関連する問題