1. Введение
В этом кратком руководстве мы рассмотрим одно из предупреждений, которые мы можем увидеть при работе с популярной средой тестирования Mockito .
А именно тот, который относится к устаревшему классу MockitoJUnitRunner
. Мы увидим, почему появляется это предупреждение и как с ним справиться.
Наконец, давайте напомним, что мы можем использовать MockitoJUnitRunner
, чтобы указать Mockito инициализировать наши тестовые двойники, аннотированные с помощью @Mock
или @Spy,
вместе с другими аннотациями Mockito.
Чтобы узнать больше о тестировании с помощью Mockito, ознакомьтесь с нашей серией статей о Mockito здесь .
2. Почему отображается это предупреждение
Это предупреждение об устаревании появится, если мы используем версию 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 удалит этот класс.
3. Решения
В этом разделе мы объясним три различных решения для устранения этого предупреждения об устаревании:
- Обновление для использования правильного импорта
- Инициализация полей с помощью
MockitoAnnotations
- Использование
МокитоПравила
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.
Вместо этого мы вызываем статический метод initMocks() класса
MockitoAnnotations
.
Мы делаем это в методе JUnit @Before
класса теста. Это инициализирует любые поля с аннотациями Mockito перед выполнением каждого теста.
3.3. Использование МокитоПравила
Однако, как мы уже упоминали, MockitoJUnitRunner
ни в коем случае не является обязательным. В этом последнем примере мы рассмотрим другой способ заставить @Mock
работать с помощью 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. Заключение
Подводя итог, в этой короткой статье мы увидели несколько вариантов того, как исправить предупреждение об устаревании класса MockitoJUnitRunner .