我有一个简单的ProcessFunction,它接受String作为输入,并给出String作为输出。如何使用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);
}
}
答案 0 :(得分:2)
为了对该方法进行单元测试,请定义预期的行为。在这种情况下,预期的行为是使用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
}
...
答案 1 :(得分:0)
如果要在对象上使用,可以使用:
Component1