警告:「MockitoJUnitRunner型は非推奨です」
1. Introduction
このクイックチュートリアルでは、we’ll have a look at one of the warnings we may see when working with the popular testing framework Mockito.
つまり、非推奨のMockitoJUnitRunnerクラスを参照しているものです。 この警告が発生する理由と対処方法について説明します。
最後に、MockitoJUnitRunnerを使用して、他のMockitoアノテーションとともに@Mock または@Spy, aアノテーションが付けられたテストダブルを初期化するようにMockitoに指示できることを思い出してください。
Mockitoを使用したテストの詳細については、Mockito series hereを確認してください。
2. Why is this Warning Shown
この非推奨の警告は、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 will remove this class.
3. Solutions
このセクションでは、この非推奨の警告を解決するための3つの異なるソリューションを説明します。
-
正しいインポートを使用するための更新
-
MockitoAnnotationsを使用してフィールドを初期化する
-
MockitoRuleの使用
3.1. Updating Imports
単純にchange the package import statementにする最も簡単な解決策から始めましょう。
import org.mockito.junit.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class ExampleTest {
//...
}
そしてそれだけです! 変更はかなり簡単にする必要があります。
3.2. Initializing Fields Using MockitoAnnotations
この次の例では、we’ll initialize our mocks a different way using MockitoAnnotations class:
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. Using MockitoRule
ただし、すでに述べたように、MockitoJUnitRunnerは必須ではありません。 この最後の例では、we’ll look at another way we can get @Mock working using *MockitoRule*:
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. Conclusion
要約すると、この短い記事では、MockitoJUnitRunnerクラスの非推奨警告を修正する方法に関するいくつかのオプションを見ました。