1. はじめに

このクイックチュートリアルでは、人気のあるテストフレームワークMockitoを使用するときに表示される可能性のある警告の1つを見ていきます。

つまり、非推奨のMockitoJUnitRunnerクラスを参照しているものです。 この警告が発生する理由とその処理方法を説明します。

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

Mockitoを使用したテストの詳細については、Mockitoシリーズのこちらをご覧ください。

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に属します。

警告の削除は必須ではありませんが、削除することをお勧めします。 Mockito3はこのクラスを削除します。

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クラスの非推奨警告を修正する方法に関するいくつかのオプションを見ました。