«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.baeldung.mockito.java8.LazyVerificationTest.testLazyVerification(LazyVerificationTest.java:21)
Actually, there were zero interactions with this mock.

2. Wanted but not invoked:
arrayList.clear();
-> at com.baeldung.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.baeldung.mockito.java8.LazyVerificationTest.testLazyVerification(LazyVerificationTest.java:19)
Actually, there were zero interactions with this mock.

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

Мы быстро рассмотрели, как мы можем использовать ленивую проверку в Mockito 2.

Кроме того, как всегда, образцы кода можно найти на GitHub.