Можно ли инициализировать макет с помощью when () внутри потока Java

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

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

Пример:

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

Всего 2 ответа


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

 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); 

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


По-другому:

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

(...)

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

Есть идеи?

10000