警告:“ MockitoJUnitRunner型は推奨されていません”

1. はじめに

このクイックチュートリアルでは、ポピュラーなテストフレームワークhttps://site.mockito.org/[Mockito].** を使用しているときに表示される可能性がある警告の1つを確認します。

つまり、廃止予定の MockitoJUnitRunner クラスを参照するものです。

この警告が発生する理由と対処方法がわかります。

最後に、 MockitoJUnitRunner を使用して、 _ @ Mock または _ @ Spyでアノテーションを付けたテストダブルスを他のMockitoアノテーションと一緒に初期化するようにMockitoに指示できることを思い出してください。

Mockitoを使ったテストの詳細については、https://www.baeldung.com/tag/mockito/[Mockito series here]をチェックしてください。

2. なぜこの警告が表示されるのですか

この廃止予定の警告は、2.2.20(2016年11月)より前のバージョンのMockitoを使用している場合に表示されます。

その背後にある歴史を簡単に見てみましょう。以前のバージョンのMockitoでは、Mockito JUnit Runnerを使用したい場合、インポートする必要のあるパッケージは次のとおりです。

import org.mockito.runners.MockitoJUnitRunner;

バージョン2.2.20からJUnit関連クラスは特定のJUnitパッケージにまとめられました。ここにパッケージがあります。

import org.mockito.junit.MockitoJUnitRunner;

その結果、元の org.mockito.runners.MockitoJUnitRunner は非推奨になりました。クラスのロジックは org.mockito.junit.runners.MockitoJUnitRunner に属しています。

警告を削除することは必須ではありませんが、実行することをお勧めします。

  • Mockito 3はこのクラスを削除します。

3. ソリューション

このセクションでは、この非推奨警告を解決するための3つの異なる解決策について説明します。

  • 正しいインポートを使用するように更新

  • MockitoAnnotations を使用してフィールドを初期化する

  • MockitoRule を使う

3.1. インポートの更新

パッケージインポート文を** 変更するという最も単純な解決策から始めましょう。

import org.mockito.junit.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class ExampleTest {
   //...
}

そしてそれだけです!変更はかなり簡単にできるはずです。

3.2. MockitoAnnotations を使用したフィールドの初期化

この次の例では、 MockitoAnnotations クラスを使用して** 別の方法でモックを初期化します。

import org.junit.Before;
import org.mockito.MockitoAnnotations;

public class ExampleTest {

    @Before
    public void initMocks() {
        MockitoAnnotations.initMocks(this);
    }

   //...
}

最初に、 MockitoJUnitRunnerへの参照を削除します。代わりに、 MockitoAnnotations クラスの静的 initMocks()__メソッドを呼び出します。

これはテストクラスのJUnit @ Before メソッドで行います。これは各テストが実行される前にMockitoアノテーションを持つフィールドを初期化します。

3.3. MockitoRule を使う

ただし、既に述べたように、 MockitoJUnitRunner は必須ではありません。この最後の例では、 __ MockitoRule を使用して @ Mock__を動作させることができる別の方法を見ていきます。

import org.junit.Rule;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;

public class ExampleTest {

    @Rule
    public MockitoRule rule = MockitoJUnit.rule();

   //...
}

最後に、この例では、JUnitルールは @ Mock というアノテーションが付いたモックを初期化します。

したがって、これは MockitoAnnotations#initMocks(Object) または @ RunWith(MockitoJUnitRunner.class) を明示的に使用する必要がないことを意味します。

4. 結論

要約すると、この短い記事では、 MockitoJUnitRunner クラスの非推奨警告を修正する方法についていくつかの選択肢がありました。