私はテストクラスTestNG
に一緒に使用しています。オブジェクトMockito
を作成しようとしましたが、メソッド呼び出しのスタブに使用されました。引数マッチャーを使用している間、Mockito は、プリミティブ型に一致させるには、必要な引数の型に応じて、、または同様のものを使用する必要があると述べています。したがって、この場合、使用すると.spy
ArgumentMatchers
anyLong()
anyInt()
anyChar()
any()
NullPointerException
私は3つの方法を試しました:
NPE
any()
プリミティブ引数に一致していたため、スローされますNPE
私が使ったので投げられますthrow new NullPointerException()
- 例外はスローされません。
以下は私が使用したコードです。(メソッドに使用static imports
しました)Mockito
@Test
public class MyTest {
class Something {
public int someMethod(long someLong, int someInt, Set<Long> someSet) {
return 1;
}
}
@Test
public void testOne() {
Something s = spy(new Something());
doReturn(5).when(s).someMethod(any(), any(), any()); // NPE
}
@Test
public void testTwo(){
Something s = spy(new Something());
if(0==0) {
throw new NullPointerException();
}
doReturn(5).when(s).someMethod(anyLong(), any(Integer.class), any());
}
@Test
public void testThree() {
Something s = spy(new Something());
doReturn(5).when(s).someMethod(anyLong(), any(Integer.class), any()); // no issues
}
}
観察:
- クラス全体を実行すると、すべてのメソッドが失敗します。
testThree
スローInvalidUseOfMatchersException
- 3 番目の方法を単独で実行すると、PASS になります。
- コメント
testOne
してから実行クラス全体を実行すると、testTwo
FAIL になり、testThree
PASS になります。
上記の私の観察では、2 と 3 は予想どおりです。testThree
しかし、なぜ観測1でも失敗しているのかわかりません。コンソールを確認すると、
このメッセージは、最後のマッチャーが any() のようなオブジェクトを返すが、スタブ化されたメソッド シグネチャがプリミティブ引数を想定している場合、NullPointerException の後に表示されることがあります。
だから私の質問は、以前のテスト方法の問題が原因でテスト方法が失敗するのはなぜですか?
(また、アルファベット順で最後に実行されるように名前testOne
を変更すると、クラス レベルでのテスト実行時に PASS になります。)testZZ
testThree