私は次のようなことをするのが好きです:
.when(
myMock.doSomething(
Matchers.eq( "1" )
)
)
.thenReturn( "1" )
.othwerwise()
.thenThrow( new IllegalArgumentException() );
もちろんotherwise()
、メソッドは存在しませんが、私が達成したいことを示すだけです。
(ちょっとした免責事項、私はこれを個人的にやったことがないので、javadocで読んでください)...モックインターフェースのすべてのメソッドが同じデフォルトの動作で問題ない場合は、モックにデフォルトの回答を設定できます次のような方法で:
Foo myMock = Mockito.mock(Foo.class,new ThrowsExceptionClass(IllegalArgumentException.class));
Mockito.when(myMock.doSomething(Matchers.eq("1"))).thenReturn("1");
JavaDoc リンク: Mockito#mockおよびThrowsExceptionClass
または、スタブのチュートリアルで説明されているように、スタブの順序が重要であり、最後に一致したものが優先されるため、次のこともできる場合があります。
Foo myMock = Mockito.mock(Foo.class);
Mockito.when(myMock.doSomething(Matchers.any(String.class))).thenThrow(IllegalArgumentException.class);
Mockito.when(myMock.doSomething(Matchers.eq("1"))).thenReturn("1");
呼び出されたパラメーターに注意を払う独自のAnswer実装を作成できます。
myMock.doSomething(Mockito.any(String.class)).thenAnswer( myAnswer );
上記の回答の実装は、次のようなことを行うことができます。
public String answer(InvocationOnMock invocation) {
if ("1".equals(invocation.getArguments()[0])) {
return "1";
}
else {
throw new IllegalArgumentException();
}
}
反対の条件を使用してください。つまり、例自体を検討してください。not(eq())
必要なときに使用することができますotherwise
:
.when( myMock.doSomething(Matchers.eq( "1" )))
.thenReturn( "1" )
.when( myMock.doSomething(not(Matchers.eq( "1" ))))
.thenThrow( new IllegalArgumentException() );