Предупреждение: «Тип MockitoJUnitRunner устарел»

Предупреждение: «Тип 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 or@Spy, along с другими аннотациями Mockito.

Чтобы узнать больше о тестировании с Mockito, ознакомьтесь с нашимMockito series here.

2. Why is this Warning Shownс

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

Давайте кратко пройдемся по истории, стоящей за этим. В более ранних версиях 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с

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

  • Обновление для использования правильного импорта

  • Инициализация полей с использованием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.. Вместо этого мы вызываем статический методinitMocks() классаMockitoAnnotations.

Мы делаем это в методе 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.