flink的副输出sideoutput单元测试

背景

处理函数中处理输出主输出的数据流数据外,也可以输出多个其他的副输出的数据流数据,当我们的处理函数有副输出时,我们需要测试他们功能的正确性,本文就提供一个测试flink副输出单元测试的例子

测试flink副输出单元测试

首先看一下处理函数,其中包含副输出逻辑

java 复制代码
public class MySideOutputProcessFunction extends ProcessFunction<String, String> {
 
    public static final OutputTag<String> OUTPUT_TAG = new OutputTag<String>("sideoutput") {};
 
    @Override
    public void processElement(String value, Context ctx, Collector<String> out) throws Exception {
        out.collect("normal:" + value);
        ctx.output(OUTPUT_TAG, "side:" + value);
    }
}

其次,看下对应的单元测试

java 复制代码
/**
 * 测试sideOutput的输出功能
 */
@Test
public void testSideOutput() throws Exception {
    MySideOutputProcessFunction mySideOutputProcessFunction = new MySideOutputProcessFunction();
    OneInputStreamOperatorTestHarness<String, String> testHarness =
            ProcessFunctionTestHarnesses.forProcessFunction(mySideOutputProcessFunction);
    testHarness.open();
    testHarness.processElement("hello", 10);
 
    // 测试主输出
    Assert.assertEquals(Lists.newArrayList("normal:hello"), testHarness.extractOutputValues());
    ConcurrentLinkedQueue<StreamRecord<String>> sideOutPutQueue =
            testHarness.getSideOutput(MySideOutputProcessFunction.OUTPUT_TAG);
    // 测试副输出
    Assert.assertEquals(Lists.newArrayList("side:hello"),
            sideOutPutQueue.stream().map(StreamRecord::getValue).collect(Collectors.toList()));
    testHarness.close();
}
相关推荐
瓦中空花21 小时前
大数据工具-Flink
大数据·flink
渣渣盟21 小时前
Flink实现TopN URL访问量统计
大数据·flink·scala
添柴少年yyds21 小时前
Flink的Checkpoint原理和流程
flink
进击切图仔21 小时前
ROS 中的单元测试
单元测试·log4j
南修子1 天前
【Flink 30天】Day24-27 实时数仓规范:ODS→DWD→DWS→ADS 分层 + Temporal Join + 生产最佳实践
clickhouse·flink·实时数仓·数据分层·temporaljoin
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧1 天前
Day01 Junit 单元测试 & 反射
java·后端·junit·单元测试
visual_zhang1 天前
单元测试系列:如何测试不愿暴露的私有状态
单元测试
代码匠心4 天前
从零开始学Flink:Flink SQL四大Join解析
大数据·flink·flink sql·大数据处理
金銀銅鐵4 天前
浅解 JUnit 4 第十五篇:如何在测试方法运行前后做些事情?
junit·单元测试
金銀銅鐵4 天前
浅解 JUnit 4 第十四篇:如何实现一个 @After 注解的替代品?
junit·单元测试