Можно ли инициализировать макет с помощью when () внутри потока Java - PullRequest
0 голосов
/ 13 мая 2019

Я пишу тест, в котором у меня есть набор, который будет вставлен в метод.Затем я буду издеваться над методом, чтобы он всегда возвращал значение true.

Я хочу быть в состоянии сделать это с помощью потока, поэтому я могу иметь большой набор.Я использую JUnit4 для тестирования и Mockito для насмешек.

Пример:

setWithValues.stream().map(value-> when(method.returnTrueOrFalse(value)).thenReturn(true));

Ответы [ 2 ]

4 голосов
/ 13 мая 2019

Хотя я могу только предположить, в чем проблема с кодом, я предполагаю, что насмешка никогда не выполняется из-за отсутствия терминальной операции, но она кажется неправильной.Дело в том, что он вводит новую заглушку для каждого значения в вашем наборе.Рассмотрите следующую альтернативу:

when(method.returnTrueOrFalse(Mockito.argThat(org.hamcrest.collection.IsIn.isIn(setWithValues)))).thenReturn(true);
// Or with static imports
when(method.returnTrueOrFalse(argThat(isIn(setWithValues)))).thenReturn(true);

Это поможет отладке и будет лучше масштабироваться с ростом вашего набора.

2 голосов
/ 13 мая 2019

Другой способ:

import org.mockito.ArgumentMatchers;
import org.mockito.Mockito;

(...)

Mockito.doAnswer(i -> setWithValues.contains(i.getArgument(0)))
    .when(method)
    .returnTrueOrFalse(ArgumentMatchers.any());
...