25

私は次のようなことをするのが好きです:

.when( 
    myMock.doSomething(
        Matchers.eq( "1" )
    ) 
)
.thenReturn( "1" )
.othwerwise()
.thenThrow( new IllegalArgumentException() );

もちろんotherwise()、メソッドは存在しませんが、私が達成したいことを示すだけです。

4

6 に答える 6

24

(ちょっとした免責事項、私はこれを個人的にやったことがないので、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");
于 2012-10-25T05:02:32.990 に答える
9

呼び出されたパラメーターに注意を払う独自の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();
    }
} 
于 2012-10-25T04:24:42.067 に答える
5

反対の条件を使用してください。つまり、例自体を検討してください。not(eq())必要なときに使用することができますotherwise:

 .when( myMock.doSomething(Matchers.eq( "1" )))
     .thenReturn( "1" )
 .when( myMock.doSomething(not(Matchers.eq( "1" ))))
     .thenThrow( new IllegalArgumentException() );
于 2012-10-25T03:57:14.697 に答える