0

私はテストクラスTestNGに一緒に使用しています。オブジェクトMockitoを作成しようとしましたが、メソッド呼び出しのスタブに使用されました。引数マッチャーを使用している間、Mockito は、プリミティブ型に一致させるには、必要な引数の型に応じて、、または同様のものを使用する必要があると述べています。したがって、この場合、使用すると.spyArgumentMatchersanyLong()anyInt()anyChar()any()NullPointerException

私は3つの方法を試しました:

  1. NPEany()プリミティブ引数に一致していたため、スローされます
  2. NPE私が使ったので投げられますthrow new NullPointerException()
  3. 例外はスローされません。

以下は私が使用したコードです。(メソッドに使用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
    }
}

観察:

  1. クラス全体を実行すると、すべてのメソッドが失敗します。testThreeスローInvalidUseOfMatchersException
  2. 3 番目の方法を単独で実行すると、PASS になります。
  3. コメントtestOneしてから実行クラス全体を実行すると、testTwoFAIL になり、testThreePASS になります。

上記の私の観察では、2 と 3 は予想どおりです。testThreeしかし、なぜ観測1でも失敗しているのかわかりません。コンソールを確認すると、

このメッセージは、最後のマッチャーが any() のようなオブジェクトを返すが、スタブ化されたメソッド シグネチャがプリミティブ引数を想定している場合、NullPointerException の後に表示されることがあります。

だから私の質問は、以前のテスト方法の問題が原因でテスト方法が失敗するのはなぜですか?

(また、アルファベット順で最後に実行されるように名前testOneを変更すると、クラス レベルでのテスト実行時に PASS になります。)testZZtestThree

4

0 に答える 0