MES系统工作流的单元测试方案

MES系统工作流的单元测试方案

在基于Java实现的MES系统中,若算子组成工作流并通过JSON传递数据,后端解析JSON后执行业务逻辑的流程,单元测试的核心是确保以下内容的正确性:

  1. 算子功能的正确性(每个算子单独的逻辑)。
  2. 工作流的正确性(算子间数据传递和组合逻辑)。
  3. JSON的解析和业务逻辑的正确性

以下是具体的方法和步骤:


1. 测试目标划分

1.1 算子的单独测试

每个算子是工作流的基础模块,因此需要确保其逻辑正确。

要测试的内容:
  • 算子是否能正确处理输入数据。
  • 算子的输出是否符合预期。
测试方法:
  • 使用JUnit或类似框架,为算子的核心功能单独编写测试用例。
  • 模拟输入数据并验证算子的输出。
示例代码:
@Test
void testFilterOperator() {FilterOperator filterOperator = new FilterOperator();List<Data> input = Arrays.asList(new Data("valid"), new Data("invalid"));List<Data> expectedOutput = Arrays.asList(new Data("valid"));List<Data> actualOutput = filterOperator.execute(input);assertEquals(expectedOutput, actualOutput);
}

1.2 JSON生成与组合测试

JSON的生成和组合是工作流中各算子协作的重要环节,需确保生成的JSON结构正确。

要测试的内容:
  • 每个算子是否能正确生成JSON片段。
  • 不同算子间的输出是否能正确组合为一个完整的JSON。
测试方法:
  • 对JSON生成逻辑进行单元测试,验证输出的JSON是否符合预期结构。
  • 使用org.jsoncom.google.gson库对JSON进行验证。
示例代码:
@Test
void testJsonComposition() {// 模拟多个算子的输出String operator1Output = "{\"key1\": \"value1\"}";String operator2Output = "{\"key2\": \"value2\"}";// 模拟组合逻辑JSONObject finalJson = new JSONObject();finalJson.put("operator1", new JSONObject(operator1Output));finalJson.put("operator2", new JSONObject(operator2Output));String expectedJson = "{ \"operator1\": {\"key1\": \"value1\"}, \"operator2\": {\"key2\": \"value2\"} }";assertEquals(expectedJson, finalJson.toString());
}

1.3 后端业务逻辑测试

后端业务逻辑依赖于JSON的正确解析和数据处理,因此需要对解析逻辑进行单独测试。

要测试的内容:
  • JSON解析是否正确提取了需要的数据。
  • 数据提取后,业务逻辑是否正常执行。
测试方法:
  • 使用伪造的JSON模拟前端发送的数据,验证解析逻辑的输出。
  • 使用Mock框架(如Mockito)模拟依赖项,隔离测试环境。
示例代码:
@Test
void testJsonParsingAndBusinessLogic() {String inputJson = "{ \"operator1\": {\"key1\": \"value1\"}, \"operator2\": {\"key2\": \"value2\"} }";// 模拟JSON解析JSONObject jsonObject = new JSONObject(inputJson);String value1 = jsonObject.getJSONObject("operator1").getString("key1");String value2 = jsonObject.getJSONObject("operator2").getString("key2");// 模拟业务逻辑BusinessLogic logic = new BusinessLogic();String result = logic.processData(value1, value2);assertEquals("Processed: value1, value2", result);
}

2. 模拟整体工作流测试

在验证单个算子逻辑和JSON生成逻辑后,需要对整个工作流的执行链条进行测试。

要测试的内容:
  • 工作流是否能正确执行。
  • 工作流的最终输出是否符合预期。
测试方法:
  • 使用Mock框架模拟HTTP请求和响应,验证从请求到结果的完整流程。
  • 可以结合Spring Boot Test进行集成测试,验证控制器逻辑。
示例代码:
@Mock
private WorkflowService workflowService;@Autowired
private MockMvc mockMvc;@Test
void testWorkflowExecution() throws Exception {// 模拟请求和响应String requestJson = "{ \"input\": \"testData\" }";String expectedResponse = "{ \"result\": \"success\" }";when(workflowService.execute(any(String.class))).thenReturn(expectedResponse);mockMvc.perform(post("/workflow/execute").contentType(MediaType.APPLICATION_JSON).content(requestJson)).andExpect(status().isOk()).andExpect(content().json(expectedResponse));
}

3. 辅助工具与最佳实践

3.1 使用Mock框架

  • Mockito:隔离依赖组件,确保只测试目标功能。
  • WireMock:用于模拟HTTP接口请求和响应。

3.2 数据驱动测试

  • 使用参数化测试(如JUnit5中的@ParameterizedTest)覆盖更多数据场景。
  • 使用外部JSON文件作为测试输入,增强可维护性。
示例:
@ParameterizedTest
@ValueSource(strings = { "test_case_1.json", "test_case_2.json" })
void testWithJsonFile(String fileName) throws Exception {String jsonInput = new String(Files.readAllBytes(Paths.get("src/test/resources/" + fileName)));// 测试逻辑...
}

3.3 使用JSON Schema验证

确保生成的JSON和预期的结构一致,可以使用JSON Schema进行验证。

示例:
@Test
void testJsonSchemaValidation() {String generatedJson = "{ \"key\": \"value\" }";String schema = "{ \"type\": \"object\", \"properties\": { \"key\": { \"type\": \"string\" } }, \"required\": [\"key\"] }";SchemaValidator validator = new SchemaValidator();assertTrue(validator.validate(generatedJson, schema));
}

总结

  1. 对单个算子进行单元测试,验证输入输出的正确性。
  2. 对JSON生成、组合和解析进行单元测试,确保数据流转正确。
  3. 对后端业务逻辑解析和处理进行单独测试,确保逻辑无误。
  4. 使用Mock和集成测试框架验证工作流的整体执行链条。

这种分层次的单元测试和集成测试方法,既保证了系统的每个模块高质量,又能验证整体的工作流执行效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/890437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网安瞭望台第16期

国内外要闻 Apache Struts 文件上传漏洞&#xff08;CVE - 2024 - 53677&#xff09; 近日&#xff0c;Apache Struts 被发现存在文件上传漏洞&#xff08;CVE - 2024 - 53677&#xff09;&#xff0c;安恒 CERT 评级为 2 级&#xff0c;CVSS3.1 评分为 8.1。 漏洞危害&#x…

基于python使用UDP协议对飞秋进行通讯—DDOS

基于飞秋的信息传输 声明&#xff1a;笔记的只是方便各位师傅学习知识&#xff0c;以下代码、网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 老规矩&#xff0c;封面在文末&#xff01; 飞秋介绍 &#xff08;…

JAVA:组合模式(Composite Pattern)的技术指南

1、简述 组合模式(Composite Pattern)是一种结构型设计模式,旨在将对象组合成树形结构以表示“部分-整体”的层次结构。它使客户端对单个对象和组合对象的使用具有一致性。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什么是组合模式 组合模式…

LeetCode:222.完全二叉树节点的数量

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;222.完全二叉树节点的数量 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二…

MaxKB基于大语言模型和 RAG的开源知识库问答系统的快速部署教程

1 部署要求 1.1 服务器配置 部署服务器要求&#xff1a; 操作系统&#xff1a;Ubuntu 22.04 / CentOS 7.6 64 位系统CPU/内存&#xff1a;4C/8GB 以上磁盘空间&#xff1a;100GB 1.2 端口要求 在线部署MaxKB需要开通的访问端口说明如下&#xff1a; 端口作用说明22SSH安装…

基于指纹图像的数据隐藏和提取matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…

kubeadm一键部署K8S 集群架构

kubeadm一键部署K8S 集群架构(centos7) https://www.k8src.cn/ https://kubernetes.io/zh-cn/docs/home/ https://blog.csdn.net/m0_58709145/article/details/140128179 https://blog.csdn.net/jiaqijiaqi666/article/details/129745828 Kubeadm init报错[ERROR CRI]: contai…

直流电机驱动电路分享(HIP4082)

一、原理图分享 注意&#xff1a;M2_INA、M2_INB可直接接3.3V电平信号。 二、芯片介绍 1、HIP4082 HIP4082是一款高频驱动器&#xff0c;专为半桥和全桥应用而设计。它具有四个高/低侧驱动输出&#xff0c;可以提供高达100V的驱动电压。HIP4082还具有逻辑级输入和反馈输入&a…

企业版 YashanDB 23.2.4 分布式集群 数据库一主二备集群安装部署指南

一、概述 1.1 文档目标 本部分旨在为技术人员提供崖山数据库企业版 23.2 在 CentOS 7 x86_64 操作系统上进行安装部署操作的全面且清晰的指引。通过对系统架构、集群拓扑和部署需求的精确阐述&#xff0c;使读者能够在安装过程开始前形成系统的概念架构&#xff0c;为后续的详…

性能】JDK和Jmeter的安装与配置

一、JDK环境配置 1. 下载JDK 官网下载地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html 选择对应系统的安装包&#xff0c;下载后安装&#xff0c;安装中记录JDK安装的地址&#xff0c;之后一直点击下一…

Mysql之YUM安装时GPG 密钥报错问题处理

一、背景说明 使用YUM安装mysql5.7的时候报错&#xff0c;报错信息提示未安装公钥。博主查看/etc/yum.repos.d/mysql-community.repo配置文件中关于公钥的配置&#xff0c;确实启用了公钥验证&#xff0c;博主再排查过程中还是走了一些弯路&#xff0c;最终顺利解决了&#xff…

启动报错java.lang.NoClassDefFoundError: ch/qos/logback/core/status/WarnStatus

报错信息图片 日志&#xff1a; Exception in thread "Quartz Scheduler [scheduler]" java.lang.NoClassDefFoundError: ch/qos/logback/core/status/WarnStatus先说我自己遇到的问题&#xff0c;我们项目在web设置了自定义的log输出路径&#xff0c;多了一个 / 去…

Elasticsearch-分词器详解

什么是分词器 1、分词器介绍 对文本进行分析处理的一种手段&#xff0c;基本处理逻辑为按照预先制定的分词规则&#xff0c;把原始文档分割成若干更小粒度的词项&#xff0c;粒度大小取决于分词器规则。 常用的中文分词器有ik按照切词的粒度粗细又分为:ik_max_word和ik_smart&…

Docker 入门:如何使用 Docker 容器化 AI 项目(一)

引言 在人工智能&#xff08;AI&#xff09;项目的开发和部署过程中&#xff0c;环境配置和依赖管理往往是开发者遇到的挑战之一。开发者通常需要在不同的机器上运行同样的代码&#xff0c;确保每个人使用的环境一致&#xff0c;才能避免 “在我的机器上可以运行”的尴尬问题。…

ExcelVBA编程输出ColorIndex与对应颜色色谱

标题 ExcelVBA编程输出ColorIndex与对应颜色色谱 正文 解决问题编程输出ColorIndex与对应色谱共56&#xff0c;打算分4纵列输出&#xff0c;标题是ColorIndex,Color,Name 1. 解释VBA中的ColorIndex属性 在VBA&#xff08;Visual Basic for Applications&#xff09;中&#xff…

2024年11月 蓝桥杯青少组 STEMA考试 Scratch真题

2024年11月 蓝桥杯青少组 STEMA考试 Scratch真题&#xff08;选择题&#xff09; 题目总数&#xff1a;5 总分数&#xff1a;50 选择题 第 1 题 单选题 Scratch运行以下程宇后&#xff0c;小兔子会&#xff08; &#xff09;。 A. 变小 B. 变大 C. 变色 D. …

springboot470基于协同过滤算法的东北特产销售系统的实现(论文+源码)_kaic

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古…

37. Three.js案例-绘制部分球体

37. Three.js案例-绘制部分球体 实现效果 知识点 WebGLRenderer WebGLRenderer 是Three.js中的一个渲染器类&#xff0c;用于将3D场景渲染到网页上。 构造器 WebGLRenderer( parameters : Object ) 参数类型描述parametersObject渲染器的配置参数&#xff0c;可选。 常用…

leetcode 面试经典 150 题:长度最小的子数组

链接长度最小的子数组题序号209题型数组解题方法滑动窗口难度中等 题目 给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件…

【游戏设计原理】22 - 石头剪刀布

一、游戏基础&#xff1a;拳头、掌心、分指 首先&#xff0c;石头剪刀布&#xff08;又名“Roshambo”&#xff09;看似简单&#xff0c;实际上可是个“深藏玄机”的零和博弈&#xff08;听起来很高深&#xff0c;其实就是输赢相抵消的意思&#xff09;。游戏中有三种手势&…