Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何对Flink ProcessFunction进行单元测试?_Java_Junit_Apache Flink_Flink Streaming - Fatal编程技术网

Java 如何对Flink ProcessFunction进行单元测试?

Java 如何对Flink ProcessFunction进行单元测试?,java,junit,apache-flink,flink-streaming,Java,Junit,Apache Flink,Flink Streaming,我有一个简单的ProcessFunction,它接受字符串作为输入,并给出一个字符串作为输出。如何使用Junit进行单元测试?因为processElement方法是void方法,并且不返回任何值 public class SampleProcessFunction extends ProcessFunction<String, String>{ @Override public void processElement(String content, Context c

我有一个简单的ProcessFunction,它接受字符串作为输入,并给出一个字符串作为输出。如何使用Junit进行单元测试?因为processElement方法是void方法,并且不返回任何值

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);
    }
}
公共类SampleProcessFunction扩展了ProcessFunction{
@凌驾
公共void processElement(字符串内容、上下文上下文、收集器)引发异常{
字符串输出=内容+输出;
collect.collect(输出);
}
}

要对该方法进行单元测试,请定义预期的行为。在本例中,预期的行为是以
content+“output”
作为参数调用
Collector::collect
方法。 因此,可以使用模拟收集器对其进行测试

下面是一个使用框架的示例:

...

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
}

...
。。。
私有最终收集器collectorMock=Mockito.mock(Collector.class);
私有最终上下文contextMock=Mockito.mock(Context.class);
私有最终SampleProcessFunction SampleProcessFunction=新SampleProcessFunction();
@试验
当任何ValuePassed()引发异常时,public void testProcessElement_应InvokeCollector_{
//给定
最终字符串content=“hello”;
//什么时候
processElement(内容、contextMock、collectorMock);
//然后
Mockito.verify(collectorMock.collect(content+“output”);//验证是否使用“hello output”准确调用了收集器方法一次
}
...

如果您想在对象上使用,可以使用:

    Mockito.atLeastOnce();
    Mockito.doReturn(myCustomObject);

更具体的场景?