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.
«