Java 如何对Flink ProcessFunction进行单元测试?
我有一个简单的ProcessFunction,它接受字符串作为输入,并给出一个字符串作为输出。如何使用Junit进行单元测试?因为processElement方法是void方法,并且不返回任何值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
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);
更具体的场景?