实用指南:Unity单元测试:C语言轻量级框架实战

news/2025/9/29 14:17:58/文章来源:https://www.cnblogs.com/slgkaifa/p/19118683

实用指南:Unity单元测试:C语言轻量级框架实战

目录

0.如何编写单元测试用例:

1.工程中建一个Middlewares文件,在这个文件夹里新建一个Unity文件夹,然后移植进keil

2.在Unity文件夹中创建unity_config.h头文件,重定向Unity的字符输出接口函数

3.修改unity_internals.h,开启对unity_config.h的包含

4.在main.c中定义 setUp 和 tearDown两个函数的原型

补充:

MobaXterm的认识

6.实验效果

7.分析

1.TEST_ASSERT_EQUAL_INT

2.开始测试与结束测试API


开源仓库: https://github.com/ThrowTheSwitch/Unity/releases

Unity 是一个用于 C 语言的轻量级单元测试框架。

移植前首先了解如何用

0.如何编写单元测试用例:

首先我们需要知道单元测试的指标有哪些,

1. 正确性

2. 可靠性

3. 性能

4. 断言数量

5. 边界值测试

6. 异常处理

7. 代码耦合度

8.覆盖率

单元测试步骤:

1.测试之前我们需要拿到由软件开发人员所撰写的代码详细设计并了解函数功能

2.通过输入输出信息,在代码中“打桩”,隔绝其余模块信息干扰

3.根据输入信号的范围,设计测试案例,

4.设计的测试案例要能覆盖到所有分支,并验证输出结果是否符合预期

1.工程中建一个Middlewares文件,在这个文件夹里新建一个Unity文件夹,然后移植进keil

2.在Unity文件夹中创建unity_config.h头文件,重定向Unity的字符输出接口函数

#ifndef __UNITY_CONFIG_H__
#define __UNITY_CONFIG_H__
#ifdef __cplusplus
extern "C"
{
#endif
#include "usart.h"
#define UNITY_OUTPUT_CHAR(a) HAL_UART_Transmit(&huart1,(uint8_t[]){(uint8_t)(a)},1,10)
#ifdef __cplusplus
}
#endif //__cplusplus
#endif //__UNITY_CONFIG_H__

3.修改unity_internals.h,开启对unity_config.h的包含

4.在main.c中定义 setUp 和 tearDown两个函数的原型

  • setUp 函数在测试开启之前运行,用来测试之前的初始化

  • tearDown函数在测试完成之后运行,用于测试之后的清理

void setUp(void)
{
}
void tearDown(void)
{
}

编写测试函数divide_func:如果b==0,返回-1,否则返回a/b的值

int32_t divide_func(const int a,const int b)
{if(0 == b){return -1;}return a/b;
}

编写测试函数test_func和test_zero_catch

  • test_func设置正确的返回值2进行测试

int32_t divide_func(const int a,const int b)
{if(0 == b){return -1;}return a/b;
}
  • test_zero_catch

void test_zero_catch(void)
{TEST_ASSERT_EQUAL_INT(-2,divide_func(2,0));
}
  • 安装MobaXterm软件,创建串口会话,设置串口参数,修改默认的换行LF之前加入回车CR

补充:

MobaXterm的认识

MobaXterm 的功能,只需要记住:这是给 Windows 电脑装了个“万能遥控器”。比如:

  1. 遥控服务器 就像用电视遥控器换台一样,用它连上公司的 Linux 服务器(用 SSH),输入命令就能查看文件、安装软件,甚至重启机器。

  2. 传文件像拖U盘 连上服务器后,左边会自动显示服务器文件(类似电脑文件夹),直接把本地文件拖进去就上传了,比微信传文件还简单。

  3. 同时操控多台机器 比如左边连服务器查日志,右边连路由器调试网络,就像浏览器开多个网页一样方便,不用反复开关窗口。

  4. 在Windows运行Linux软件 比如让服务器上的 MATLAB 软件界面直接显示在你的 Windows 电脑上(类似远程看电影),不用在本地安装。

  5. 自带工具箱 内置网络检测工具(类似手机测网速)、文本编辑器(类似记事本但更强大),甚至能写脚本自动干活(比如每天自动备份文件)。

举个实际例子: 你买了台云服务器装 Linux 系统,用 MobaXterm 就能: ① 输入服务器IP一键连接(类似输入网址) ② 输入 top 命令查看 CPU 使用率(类似任务管理器) ③ 左边拖拽上传网站代码文件 ④ 右边开新标签连数据库修改配置 ⑤ 直接运行服务器上的网站测试工具,结果直接弹窗显示

6.实验效果

void test_unity(void)
{UNITY_BEGIN();RUN_TEST(test_func);UNITY_END();
}

void test_unity(void)
{UNITY_BEGIN();RUN_TEST(test_zero_catch);UNITY_END();
}

7.分析

1.TEST_ASSERT_EQUAL_INT

在 Unity 单元测试框架中,TEST_ASSERT_EQUAL_INT是一个核心的断言宏,用于在单元测试中验证两个整数是否相等,是判断测试用例是否通过的关键工具。

具体含义:

TEST_ASSERT_EQUAL_INT(expected, actual) 的作用是:检查 “实际值(actual)” 是否等于 “预期值(expected)”

  • 如果两者相等,当前测试用例通过;

  • 如果两者不相等,测试失败,Unity 会自动输出详细的错误信息(包括预期值、实际值、错误发生的文件和行号),帮助你定位问题。

结合代码举例:

1.在 test_func 中:

TEST_ASSERT_EQUAL_INT(2, divide_func(2,1));

这里的含义是:预期 divide_func(2, 1) 的返回值是 2(因为 2÷1=2)。实际运行后,divide_func(2,1) 确实返回 2,所以这个测试用例通过

2.在 test_zero_catch 中:

TEST_ASSERT_EQUAL_INT(-2, divide_func(2,0));

这里的含义是:预期 divide_func(2, 0) 的返回值是 -2。但实际运行时,divide_func 中当 b=0 时返回 -1,所以 “实际值(-1)≠ 预期值(-2)”,这个测试用例失败,Unity 会报错提示差异。

简单说:

TEST_ASSERT_EQUAL_INT 就像单元测试中的 “裁判”,它会对比你期望的结果和代码实际运行的结果,如果一致就 “通过”,不一致就 “判错”,帮助你验证代码逻辑是否符合预期。

2.开始测试与结束测试API

在 Unity 单元测试框架中,UNITY_BEGIN()UNITY_END()必须的,它们是整个测试流程的 “启动器” 和 “收尾器”,负责初始化测试环境、管理测试生命周期和生成最终的测试报告。

为什么必须加?

  • UNITY_BEGIN():测试开始时调用,作用是初始化 Unity 框架(比如重置测试计数器、配置输出设备、准备测试环境等),为后续的测试执行做准备。如果没有它,测试函数可能无法被正确识别和执行,结果也无法被记录。

  • UNITY_END():测试全部执行完毕后调用,作用是结束测试流程(比如统计总测试数、失败数,输出最终的测试报告 “OK” 或 “FAIL” 信息,释放测试资源等)。如果没有它,测试结果不会被完整输出,你无法知道测试到底是全部通过还是有失败。

正确使用方法

这两个宏需要成对出现,且必须包裹所有的 RUN_TEST() 调用(即测试函数的执行)。标准用法如下:

// 测试入口函数(通常命名为test_unity或main)
void test_unity(void)
{UNITY_BEGIN();  // 1. 启动测试框架,初始化环境// 2. 运行所有需要执行的测试函数(用RUN_TEST包裹)RUN_TEST(test_func);       // 运行第一个测试RUN_TEST(test_zero_catch); // 运行第二个测试// 可以继续添加更多测试...UNITY_END();    // 3. 结束测试,输出最终报告
}

UNITY_BEGIN() 是 “测试开始的信号”,UNITY_END() 是 “测试结束的信号”,所有测试函数的执行必须放在这两个信号之间,框架才能正确工作。

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

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

相关文章

做网站可能遇到的困难做站群的网站要备案吗

1查看数据情况 df.shape df.info() 2.用指定值填充 df df.fillna(x) 3.判断是否缺失 df.isnull() 4.删除缺失数据 df df.dropna() 5.补充平均值 df df.fillna(df.mean()) 6.填充他前面一个元素值(ffill向前填充,bfill向后填充)(limit:可以…

网站上不去首页seo要怎么办wordpress 补丁

基本介绍 Java Agent是一种特殊的Java程序,它允许开发者在Java虚拟机(JVM)启动时或运行期间通过java.lang.instrument包提供的Java标准接口进行代码插桩,从而实现在Java应用程序类加载和运行期间动态修改已加载或者未加载的类,包括类的属性、…

免费的网站域名商业网站案例

基于Docker for Windows部署ChatGPT-Next-Web 项目地址安装Docker for Windows部署项目参数讲解参数示例 运行 项目地址 https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web 安装Docker for Windows 官网地址:https://www.docker.com/ 下拉找到Download 选择W…

【ACM出版】第五届管理科学和软件工程国际学术会议(ICMSSE 2025)

第五届管理科学和软件工程国际学术会议(ICMSSE 2025)将于2025年10月24-26日于南京召开。【高届数、范围广、录用高、见刊快、检索稳】 【管理科学、软件工程、计算机相关主题方向均可投稿】 第五届管理科学和软件工程国…

PiXYZ Studio 2021下载地址与安装教程

软件介绍 PiXYZ Studio 2021是Unity公司推出的专业3D数据准备与优化工具,专为处理复杂CAD、3D和点云模型设计。该版本通过集成自动化批处理、实时协作与跨平台兼容功能,显著提升工业设计与实时3D开发的效率。其核心功…

coremail日常操作

客户端下载: https://www-lunkr.coremail.cn/download.html#email 创建测试用户: 登录webadmin,点组织管理-用户管理,新建用户

很多网站开发没有框架如何制作的如何 做网站挣钱

wow代码人们让钱包瑟瑟发抖的双十一已经来啦与此同时码不停蹄地向你奔赴而来的还有 CSDN 为你准备的???? 1 元秒杀 ????价值 3.5 万元的爆款电子书限时特惠,仅需 1 元你,准备好了吗仅限 1000 人速领????????????错过悔10年系列好书

Win 10 LSTC 使用 Podman - tfel

小记一下 Win 10 LTSC 上运行 WSL, Podman 相关的知识前言全文仅为个人折腾记录因为需要跑 docker,发现自己的电脑上还没有装。加上先前在网上看到有人对比 Docker 和 Podman以及之前自己使用 Colima 的记忆, 决定用 …

深入解析:在 C# .NETCore 中使用 MongoDB(第 2 部分):使用过滤子句检索文档

深入解析:在 C# .NETCore 中使用 MongoDB(第 2 部分):使用过滤子句检索文档2025-09-29 14:03 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflo…

网站开发知乎wordpress进入

如图所示,在公式后面加编码后公式也变小了: 加编码前: 加编码后: 采用样式分隔符(Ctrlaltenter)即可解决,输完公式后,按enter转行,输入你要的东西(编号什么的…

电脑和手机都能浏览的网站开发网站开发后端需要哪些技术

来源 | 扔物线责编 | Carol文章开始之前,首先来看个视频:开始说到依赖注入,做 Android 的人都会想到一个库:Dagger;说到 Dagger,大家的反应普遍是一套三连:牛逼、高端、我才不用。又牛逼又高端&…

商丘做网站的公司肇庆企业做网站

点击上方蓝字关注我们!因为分享,我们相遇在SEO路上“网站上线一段时间了,为什么没有流量?为什么没有询盘?”对于做网络营销的企业而言,网站流量与询盘是建立网站的根本目的,可是为什么操作了一段…

网站后台信息发布这样做网站开发工具介绍

455.分发饼干 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有…

手机怎么做网站添加背景音乐chrome手机版

.net famework3.5中新增加了一个关于时区的静态类,可以使得我们方便的操作与时区相关的信息 下面的内容是摘自MSDN的信息,注意:这个类是Beta2中的类,至于Release后是否改变还不知道。由于电脑中没有安装英文正式版的MSDN,所以只能…

专业网站建站费用百度竞价防软件点击软件

ListViewTimer列表中每一个item都有计时器 (可实现倒计时或者计时器的功能)项目中有时会遇到列表中含有倒计时或者是计时器的需求,实现的方式有很多种,此Demo中是使用Thread Handler实时的对item的局部进行刷新达到计时或倒计时的功能本项目中实现的是计…

龙岗商城网站建设哪家便宜品牌网站建设 app建设

问候! :) 离开几个月后,我决定恢复风格:)。 我注意到我以前有关新的Date / Time API的一篇文章非常受欢迎,因此这次我将把本篇文章专门介绍Java 8的另一个新功能: Lambda Expressions 。 功能编程 Lambda表达式是Java编程语言最…

安州区建设局网站网页给别人做的 网站后续收费吗

由麦克斯韦方程组推出均匀平面电磁波及其特征 均匀平面电磁波是指在传输方向垂直与传输方向垂直的平面上,电磁波的每一点的电场和磁场都相同,这种电磁波被称作均匀平面电磁波。 研究任何一种物理现象,当一种物理现象特别复杂的时候&#xf…

做网站推广弊端医疗器械网站备案前置审批事例

一、停更不停用 现在 SpringCloud 不再修复 bug,也不再接收合并请求,也不再发布新版本,但是目前还是可以继续使用的。 二、以前的组件 以前 SpringCloud 常用的组件如下图,服务的注册和发现使用 Eureka,服务的负载和调…

同一个ip的网站做链接有用资讯网站优化排名

Ubuntu在打包过程请自行检索其它文章; 在打包时候默认不能打包一些静态资源的,比如以配置文件为例config目录 当程序打包安装后,安装目录中没有config目录,这时候就需要我们手动创建config目录及目录中对应的配置文件等内容&…