当前位置: 首页 > news >正文

flink的副输出sideoutput单元测试

背景

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

测试flink副输出单元测试

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

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

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

/*** 测试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();
}

相关文章:

  • 基于opencv+tensorflow+神经网络的智能银行卡卡号识别系统——深度学习算法应用(含python、模型源码)+数据集(二)
  • js中的instance,isPrototype和getPrototypeOf的使用,来判断类的关系
  • 这就是思维导图!全面分析思维导图的实际用途
  • 深度学习_13_YOLO_图片切片及维度复原
  • 如何下载 Apache + PHP + Mysql 集成安装环境并结合内网穿透工具实现公网访问内网服务
  • 【 云原生 | K8S 】kubeadm 部署Kubernetes集群
  • Redis 5大数据类型命令解读
  • 作为程序员,我建议你学会写作
  • 如何解决网页中的pdf文件无法下载?pdf打印显示空白怎么办?
  • 在Spring Boot中使用进程内缓存和Cache注解
  • 当我只有一个代理,我该如何从内网搭建一个docker环境
  • edge/chrome浏览器favicon.ico缓存问题
  • TEMU要求提交RSL Report 铅镉RSL邻苯项目化学物质检测报告
  • Sentinel
  • Clickhouse学习笔记
  • python3.6+scrapy+mysql 爬虫实战
  • 【前端学习】-粗谈选择器
  • Druid 在有赞的实践
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JDK9: 集成 Jshell 和 Maven 项目.
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • spark本地环境的搭建到运行第一个spark程序
  • v-if和v-for连用出现的问题
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 原生JS动态加载JS、CSS文件及代码脚本
  • #{}和${}的区别?
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (十六)一篇文章学会Java的常用API
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (循环依赖问题)学习spring的第九天
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)项目管理杂谈-我所期望的新人
  • ./configure,make,make install的作用(转)
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET Project Open Day(2011.11.13)
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • [ActionScript][AS3]小小笔记
  • [Android]通过PhoneLookup读取所有电话号码
  • [AutoSAR系列] 1.3 AutoSar 架构
  • [CUDA手搓]从零开始用C++ CUDA搭建一个卷积神经网络(LeNet),了解神经网络各个层背后算法原理
  • [dfs搜索寻找矩阵中最长递减序列]魔法森林的秘密路径
  • [echarts] y轴不显示0
  • [fsevents@^2.1.2] optional install error: Package require os(darwin) not compatible with your platfo
  • [go 反射] 进阶
  • [go] 迭代器模式
  • [IE编程] WebBrowser控件的多页面浏览(Tabbed Browsing)开发接口
  • [linux time命令学习篇] time 统计命令执行的时间
  • [Machine Learning] 领域适应和迁移学习