У меня есть простая функция ProcessFunction, которая принимает String в качестве входных данных и дает String в качестве выходных данных. Как выполнить модульное тестирование с помощью Junit? Поскольку метод processElement является недействительным и не возвращает значения.
public class SampleProcessFunction extends ProcessFunction<String, String>{
@Override
public void processElement(String content, Context context, Collector<String> collector) throws Exception {
String output = content + "output";
collector.collect(output);
}
}




Для модульного тестирования этого метода определите ожидаемое поведение. В этом случае ожидаемым поведением является однократный вызов метода Collector::collect с content + "output" в качестве аргумента.
Таким образом, это можно проверить с помощью имитационного сборщика.
Вот пример использования фреймворка Mockito:
...
private final Collector<String> collectorMock = Mockito.mock(Collector.class);
private final Context contextMock = Mockito.mock(Context.class);
private final SampleProcessFunction sampleProcessFunction = new SampleProcessFunction();
@Test
public void testProcessElement_shouldInvokeCollector_whenAnyValuePassed() throws Exception {
// given
final String content = "hello ";
// when
sampleProcessFunction.processElement(content, contextMock, collectorMock);
// then
Mockito.verify(collectorMock).collect(content + "output"); // verifies that collector method was invoked with "hello output" exactly once
}
...
если вы хотите на объекте, вы можете использовать:
Mockito.atLeastOnce();
Mockito.doReturn(myCustomObject);
более конкретный сценарий?