1. Введение

В этом кратком руководстве мы рассмотрим одно из предупреждений, которое может появиться при работе с популярной средой тестирования Mockito.

А именно тот, который относится к устаревшему классу MockitoJUnitRunner. Мы увидим, почему появляется это предупреждение и как с ним справиться.

Наконец, давайте напомним, что мы можем использовать MockitoJUnitRunner, чтобы указать Mockito инициализировать наши тестовые двойники, аннотированные с помощью @Mock или @Spy, вместе с другими аннотациями Mockito.

Чтобы узнать больше о тестировании с помощью Mockito, ознакомьтесь с нашей серией статей о Mockito здесь.

2. Почему отображается это предупреждение

Это предупреждение об устаревании появится, если мы используем версию Mockito до 2.2.20 (ноябрь 2016 г.).

Давайте кратко пройдемся по истории, стоящей за этим. В более ранних версиях Mockito, если мы хотели использовать Mockito JUnit Runner, пакет, который нам нужно было импортировать, был следующим:

Начиная с версии 2.2.20 классы, связанные с JUnit, были перегруппированы в определенный пакет JUnit. Мы можем найти пакет здесь:

import org.mockito.runners.MockitoJUnitRunner;

Следовательно, оригинальный org.mockito.runners.MockitoJUnitRunner теперь устарел. Логика класса теперь принадлежит org.mockito.junit.runners.MockitoJUnitRunner.

import org.mockito.junit.MockitoJUnitRunner;

Хотя удаление предупреждения не является обязательным, это рекомендуется сделать. Mockito 3 удалит этот класс.

3. Решения

В этом разделе мы объясним три различных решения для устранения этого предупреждения об устаревании:

Обновление для использования правильного импорта Инициализация полей с помощью MockitoAnnotations Использование MockitoRule

    3.1. Обновление импорта

Давайте начнем с самого простого решения, которое состоит в том, чтобы просто изменить оператор импорта пакета:

И это все! Изменение должно быть достаточно простым.

import org.mockito.junit.MockitoJUnitRunner;

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

3.2. Инициализация полей с помощью MockitoAnnotations

В следующем примере мы инициализируем наши макеты другим способом, используя класс MockitoAnnotations:

Прежде всего, мы удаляем ссылку на MockitoJUnitRunner. Вместо этого мы вызываем статический метод initMocks() класса MockitoAnnotations.

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

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

    //...
}

Мы делаем это в методе JUnit @Before класса теста. Это инициализирует любые поля с аннотациями Mockito перед выполнением каждого теста.

3.3. Использование MockitoRule

Однако, как мы уже упоминали, MockitoJUnitRunner ни в коем случае не является обязательным. В этом последнем примере мы рассмотрим другой способ заставить @Mock работать с помощью MockitoRule:

Наконец, в этом примере правило JUnit инициализирует любые моки, аннотированные с помощью @Mock.

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

public class ExampleTest {

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

    //...
}

Следовательно, это означает, что явное использование MockitoAnnotations#initMocks(Object) или @RunWith(MockitoJUnitRunner.class) не требуется.

4. Заключение

Подводя итог, в этой короткой статье мы увидели несколько вариантов того, как исправить предупреждение об устаревании класса MockitoJUnitRunner.

«