Как использовать мягкие утверждения в Mockito? - PullRequest
0 голосов
/ 09 декабря 2018

Я знаю, что мы можем использовать ErrorCollector или мягких утверждений (AssertJ или TestNG), которые не проваливают модульный тест сразу.

Как они могутиспользовать с утверждениями Мокито?Или, если они не могут, Mockito предоставляет какие-либо альтернативы?


Пример кода

verify(mock).isMethod1();
verify(mock, times(1)).callMethod2(any(StringBuilder.class));
verify(mock, never()).callMethod3(any(StringBuilder.class));
verify(mock, never()).callMethod4(any(String.class));

Проблема

В этом фрагменте кода, если проверка не удастся, тогда тест завершится неудачей, что приведет к прерыванию оставшихся операторов verify (может потребоваться несколько прогонов теста, пока не будут выявлены все ошибки этого модульного теста, что отнимает много времени).

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Используя мягкие утверждения, вы можете сделать:

softly.assertThatThrownBy(() -> verify(mock).isMethod1()).doesNotThrowAnyException();
softly.assertThatThrownBy(() -> verify(mock, times(1)).callMethod2(any(StringBuilder.class))).doesNotThrowAnyException();
softly.assertThatThrownBy(() -> verify(mock, never()).callMethod3(any(StringBuilder.class))).doesNotThrowAnyException();
softly.assertThatThrownBy(() -> verify(mock, never()).callMethod4(anyString())).doesNotThrowAnyException();

Если одно или несколько ваших подтверждений мокито не выполнятся, это вызовет исключение, и softAssertion выполнит работу по созданию отчетов.

0 голосов
/ 09 декабря 2018

Начиная с Mockito 2.1.0, вы можете использовать правило VerificationCollector для сбора нескольких ошибок проверки и одновременного отчета.

Пример

import static org.mockito.Mockito.verify;
import org.junit.Rule;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.VerificationCollector;

// ...

    @Rule
    public final VerificationCollector collector = MockitoJUnit.collector();


    @Test
    public void givenXWhenYThenZ() throws Exception {
        // ...
        verify(mock).isMethod1();
        verify(mock, times(1)).callMethod2(any(StringBuilder.class));
        verify(mock, never()).callMethod3(any(StringBuilder.class));
        verify(mock, never()).callMethod4(any(String.class));
    }

Известные проблемы

Это правило нельзя использовать с правилом ErrorCollector в одном и том же методе тестирования.В отдельных тестах работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...