警告:“ 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
クラスの非推奨警告を修正する方法についていくつかの選択肢がありました。