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();
}
相关推荐
君不见,青丝成雪3 小时前
Flink双流join
大数据·数据仓库·flink
程序员二黑9 小时前
【软件测试】等待的艺术:详解显式等待与隐式等待,告别time.sleep!
单元测试·测试·ab测试
更深兼春远1 天前
flink+clinkhouse安装部署
大数据·clickhouse·flink
最初的↘那颗心1 天前
Flink Stream API 源码走读 - print()
java·大数据·hadoop·flink·实时计算
冬至z1 天前
Vue 2 项目中快速集成 Jest 单元测试(超详细教程)
前端·单元测试
最初的↘那颗心1 天前
Flink Stream API - 源码开发需求描述
java·大数据·hadoop·flink·实时计算
EndingCoder1 天前
测试 Next.js 应用:工具与策略
开发语言·前端·javascript·log4j·测试·全栈·next.js
Jay Kay2 天前
Flink原理与实践 · 第三章总结
大数据·flink
程序员二黑2 天前
Web UI自动化王者:Selenium WebDriver 核心原理与API详解
单元测试·测试·ab测试
陆小叁3 天前
基于Flink CDC实现联系人与标签数据实时同步至ES的实践
java·elasticsearch·flink