1. Введение
В этом коротком уроке мы рассмотрим ленивые проверки в Mockito 2.
Вместо быстрого отказа Mockito позволяет нам увидеть все результаты, собранные и представленные в конце теста.
2. Зависимости Maven
Начнем с добавления зависимости Mockito 2 :
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.21.0</version>
</dependency>
3. Ленивая проверка
Поведение Mockito по умолчанию — останавливаться при первом сбое, т. е. нетерпеливо — этот подход также известен как отказоустойчивый
.
Иногда нам может потребоваться выполнить все проверки и сообщить о них — независимо от предыдущих сбоев.
VerificationCollector
— это правило JUnit, которое собирает все проверки в методах тестирования.
Они выполняются и сообщаются в конце теста, если есть сбои:
public class LazyVerificationTest {
@Rule
public VerificationCollector verificationCollector = MockitoJUnit.collector();
// ...
}
Добавим простой тест:
@Test
public void testLazyVerification() throws Exception {
List mockList = mock(ArrayList.class);
verify(mockList).add("one");
verify(mockList).clear();
}
Когда этот тест будет выполнен, будет сообщено об ошибках обеих проверок :
org.mockito.exceptions.base.MockitoAssertionError: There were multiple verification failures:
1. Wanted but not invoked:
arrayList.add("one");
-> at com.foreach.mockito.java8.LazyVerificationTest.testLazyVerification(LazyVerificationTest.java:21)
Actually, there were zero interactions with this mock.
2. Wanted but not invoked:
arrayList.clear();
-> at com.foreach.mockito.java8.LazyVerificationTest.testLazyVerification(LazyVerificationTest.java:22)
Actually, there were zero interactions with this mock.
Без правила VerificationCollector
сообщается только о первой проверке:
Wanted but not invoked:
arrayList.add("one");
-> at com.foreach.mockito.java8.LazyVerificationTest.testLazyVerification(LazyVerificationTest.java:19)
Actually, there were zero interactions with this mock.
4. Вывод
Мы быстро рассмотрели, как можно использовать ленивую проверку в Mockito 2.
Также, как всегда, образцы кода можно найти на GitHub .