変なテスト要求仕様であるし、こんなこと通常しないかもしれないが、リターン値を
when で書くメソッドの引数の条件以外の条件で分岐させる時に応用できるかもしれない。
通常、String 1個の引数メソッドのモック
Mockito.when(テスト対象Class.メソッド(Mockito.anyString()).thenReturn(期待値);
thenReturn ではなく、thenAnswer を使ってAnswer<T> をオーバライドで書く。
// 5秒遅延して "A" を返す。 Mockito.when(テスト対象Class.メソッド(Mockito.contains(”a")) .thenAnswer(new Answer<String>() { @Override public String answer(InvocationOnMock invocation){ // 第1引数は、invocation.getArgument(0) try{ Thread.sleep(5000); }catch(InterruptedException e){} return "A"; } });
遅延以外の要求 → when で書くメソッドの引数の条件もこのように、
Answer<T> をオーバライドで書くことで、invocation.getArgument(0) で引数も参照可能で、
return 値を更に場合分けもできるはずだ。