ArgumentMatchers
を使用する次のJUnitテストを作成しました。ArgumentMatcherを使用する場合のNullPointerException
MyClass classUnderTest = new MyClass();
class AnyBooleanMatcher extends ArgumentMatcher<Boolean> {
public boolean matches(Object argument) {
return ((Boolean) argument).equals(Boolean.TRUE);
}
}
class MyObjectMatcher extends ArgumentMatcher<MyObject> {
public boolean matches(Object argument) {
return ((MyObject) argument).getValue().equals("123");
}
}
final Service mockService = mock(Service.class);
when(mockService.search(Matchers.argThat(new MyObjectMatcher()),
Matchers.argThat(new AnyBooleanMatcher())));
classUnderTest.callMethod(mock(ActionEvent.class));
verify(mockService).search(Matchers.argThat(new MyObjectMatcher()),
Matchers.argThat(new AnyBooleanMatcher()));
残念ながら、私はいつもwhen
声明で、NullPointerException
を取得しています。
なぜか分かります。argThat
は、JavaDocで指定されているようにnull
を返します。しかし、正確に同じ方法でモデル化されたexampleのテストがうまくいかない場合、私のテストがうまくいかない理由はわかりません。
*正確に*はNPEですか? 'when'ステートメントには、NPEを引き起こしている埋め込みメソッド呼び出しがたくさんあります。 –
NPEは 'Matchers.argThat(new MyObjectMatcher())'で発生すると思います。少なくともそこには、メソッドでこのステートメントを抽出するときも発生します(Mockitoのドキュメントで推奨されています)。そして、「argThat」は、定義帰り「null」であるべきです。 : - | –