Как выполнить модульное тестирование Flink ProcessFunction? - PullRequest
0 голосов
/ 02 июля 2018

У меня есть простая 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);
    }
}

Ответы [ 2 ]

0 голосов
/ 18 января 2019

если вы хотите на объекте, вы можете использовать:

    Mockito.atLeastOnce();
    Mockito.doReturn(myCustomObject);
0 голосов
/ 02 июля 2018

Для модульного тестирования этого метода определите ожидаемое поведение. В этом случае ожидаемое поведение - это одиночный вызов метода Collector::collect с content + "output" в качестве аргумента. Таким образом, это может быть проверено с использованием поддельного коллектора.

Вот пример использования Mockito framework:

...

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
}

...
...