【时时三省】unity test 测试框架 介绍(适用于C语言进行测试的)

1,关于 unity test 测试框架的介绍

        unity test 是 ThrowTheSwitch.org 的一个主要工程。它是专注于为嵌入式工具链而生的C语言单元测试框架。它可以适用于大工程或者小工程都可以。它的核心文件是一个.c文件和两个头文件。

备注:

        下载源码地址:

GitHub - ThrowTheSwitch/Unity: Simple Unit Testing for C

        也可以从我上传的资源中下载源码:https://download.csdn.net/download/2301_81226734/89612039?spm=1001.2014.3001.5503

        也可以直接下载经过移植的源码:

https://download.csdn.net/download/2301_81226734/89611242?spm=1001.2014.3001.5503

2,测试框架关于源码的介绍

可以把unity test的测试框架分为四类文件:

  1. Unity Test 框架核心文件
  2. 被测试函数
  3. 测试用例
  4. main

在unity test 的源码中,目录结构如下图所示:

auto 目录:

        有一些可以简化测试工作流程的脚本。其实对于unity test 不是必须的。

docs 目录:

        关于unity test 如何使用的文档,帮助测试人员迅速上手。

        这个目录下的这个 《UnityGettingStartedGuide.md》这个文件,是关于测试框架的关于目录,如何使用测试框架的简单介绍。全英文记述。

examples 目录:

        有四种使用 unity test 的例子,分别是四个目录。

extras 目录:

        提供一些可以添加进 unity test 的非核心文件的组件服务。

src 目录:

        一个.c 两个.h 文件,就是 unity test。

test 目录:

        这是关于 unity test 如何被测试的。

3,使用unity test测试C代码

#include "unity.h"
#include "file_to_test.h"void setUp(void) {// set stuff up here
}void tearDown(void) {// clean stuff up here
}void test_function_should_doBlahAndBlah(void) {//test stuff
}void test_function_should_doAlsoDoBlah(void) {//more test stuff
}// not needed when using generate_test_runner.rb
int main(void) {UNITY_BEGIN();RUN_TEST(test_function_should_doBlahAndBlah);RUN_TEST(test_function_should_doAlsoDoBlah);return UNITY_END();
}

如上代码,是使用 unity test 测试C代码的一个简单应用。

首先需要包含两个头文件。第一个头文件为 unity.h,第二个为被测代码的 头文件。

其次,定义 setUp(), tearDown() 函数的内容。第一个函数的内容,会在RUN_TEST()用例开始前运行;第二个函数的内容,会在RUN_TEST()用例结束后运行。可以根据需要定义。可以是空函数。这个是由 unity test 测试框架实现的。 setUp(), tearDown() 这两个函数的名字不可以更改,不需要在用例开始前后调用,自动执行。

然后,定义了两个测试函数 test_function_should_doBlahAndBlah(), test_function_should_doAlsoDoBlah()。通常以test_开头,便于区分是测试函数。函数体内部编写需要测试的内容。

最后,编写 main() 函数体的内容。在用例开始前,先调用 UNITY_BEGIN() 宏函数,为测试环境初始化变量。接着,使用 RUN_TEST 宏调用测试函数test_function_should_doBlahAndBlah()和test_function_should_doAlsoDoBlah()。最后调用 UNITY_END() 宏函数,对测试环境进行清理,并梳理测试用例结果。

备注:

        上面代码中的宏名,则是由 unity test测试框架定义好的,在第一次使用此框架对代码进行测试时,先按照此模板进行测试。

4,常用断言举例

unity test 测试框架中,断言非常多,断言的作用就在于判断数值的正确性。如果不符合预期,则此用例失败,会打印失败信息。接着执行下一个用例。这里只举例几个:

TEST_ASSERT_TRUE(condition)

        判断 condition 是否为 TRUE

TEST_ASSERT_EQUAL(expected, actual)

        判断 expected 和 actual是否一致。一致成功,不一致打印失败信息,此用例结束,继续执行下个用例。

TEST_ASSERT_EQUAL_STRING(expected, actual)

        判断两个字符串是否一致

TEST_ASSERT_NULL(pointer)

        判断指针是否为空

TEST_ASSERT_EQUAL_MEMORY(expected, actual, len)

        判断两块内存是否相等。可以为指针,也可以为数组。

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

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

相关文章

应急响应-Web3

打开虚拟机之后,运行解题系统: 共有三个问题! 攻击者的两个IP地址 首先我们看到机器的桌面上还是存在phpstudy,那就还是先去看看是不是从web层面进行的攻击,上传webshell从而getshell。 利用D盾尝试对phpstudy目录进…

WordPress资源下载类主题 CeoMax-Pro_v7.6绕授权开心版

CeoMax-Pro强大的功能 在不久的将来Ta能实现你一切幻想!我们也在为此而不断努力。适用于资源站、下载站、交易站、素材站、源码站、课程站、cms等等等等,Ta 为追求极致的你而生。多风格多样式多类型多行业多功能 源码下载:ceomax-pro7.6.zip…

【系统架构设计师】二十四、安全架构设计理论与实践②

目录 三、系统安全体系架构规划框架 3.1 信息系统安全体系规划 3.2 信息系统安全规划框架 3.2.1 信息系统安全规划依托企业信息化战略规划 3.2.2 信息系统安全规划需要围绕技术安全、管理安全、组织安全考虑 3.2.3 信息系统安全规划以信息系统与信息资源的安全保护为核心…

[环境配置]Pycharm:Failed to start [PowerShell.exe]

解决方法,点Local旁边的 号,点击Command Prompt,即可在Pycharm中呼出控制台。 如果要修改Command Prompt的启动时访问的cmd.exe的路径,可以去Settings→Tools→Terminal中,修改Shell Path实现,改为cmd.exe…

AWS开发人工智能:如何基于云进行开发人工智能AI

随着人工智能技术的飞速发展,企业对高效、易用的AI服务需求日益增长。Amazon Bedrock是AWS推出的一项创新服务,旨在为企业提供一个简单、安全的平台,以访问和集成先进的基础模型。本文中九河云将详细介绍Amazon Bedrock的功能特点以及其收费方…

117页PPT埃森哲-物流行业信息化整体规划方案

一、埃森哲-物流行业信息化整体规划方案 资料下载方式,请看每张图片右下角信息 埃森哲在物流行业信息化整体规划项目中的核心内容,旨在帮助物流企业通过信息技术的应用实现业务流程的优化、运营效率的提升以及市场竞争力的增强。以下是埃森哲在此类项目…

C语言指针(1)

目录 一、内存和地址 1、生活中的例子 2、内存的关系 二、指针变量和地址 1、&符号,%p占位符 2、一个简单的指针代码。 3、理解指针 4、解引用操作符 5、指针变量的大小。 三、指针变量类型的意义 1、指针解引用的作用 2、指针指针 3、指针-指针 4…

Python初学者必须掌握的基础知识点

Python初学者必须掌握的基础知识点包括数据类型与变量、控制结构(条件语句和循环语句)、基本数据结构(列表、元组、字典、集合)、函数与模块、以及字符串处理等。以下是对这些基础知识点及其对应代码的详细介绍: 1. …

利用Llama 3 API实现盈利:细节解析

随着人工智能技术的快速发展,基于大模型的服务成为了众多初创企业关注的焦点。Llama 3 API作为一种强大的语言模型接口,为小型公司提供了利用先进AI技术的机会。本文将探讨这些小公司如何通过Llama 3 API实现盈利,并分析其中的关键因素。 一、Llama 3 API性能概览 批处理输…

Golang | Leetcode Golang题解之第318题最大单词长度乘积

题目&#xff1a; 题解&#xff1a; func maxProduct(words []string) (ans int) {masks : map[int]int{}for _, word : range words {mask : 0for _, ch : range word {mask | 1 << (ch - a)}if len(word) > masks[mask] {masks[mask] len(word)}}for x, lenX : ra…

设计模式 - Singleton pattern 单例模式

文章目录 定义单例模式的实现构成构成UML图 单例模式的六种实现懒汉式-线程不安全懒汉式-线程安全饿汉式-线程安全双重校验锁-线程安全静态内部类实现枚举实现 总结其他设计模式文章&#xff1a;最后 定义 单例模式是一种创建型设计模式&#xff0c;它用来保证一个类只有一个实…

Candance Allegro 入门教程笔记:PCB封装库的组成元素

文章目录 一、PCB封装库的组成元素二、使用Padstack Edictor制作封装焊盘引脚三、PCB Editor软件创建贴片封装&#xff08;STM32F103T8U6 QFN36 为例&#xff09;1.引入库2.读入数据 一、PCB封装库的组成元素 一般来说&#xff0c;针对于Allegro软件&#xff0c;完整的封装是由…

数据结构之《二叉树》(中)

在数据结构之《二叉树》(上)中学习了树的相关概念&#xff0c;还了解的树中的二叉树的顺序结构和链式结构&#xff0c;在本篇中我们将重点学习二叉树中的堆的相关概念与性质&#xff0c;同时试着实现堆中的相关方法&#xff0c;一起加油吧&#xff01; 1.实现顺序结构二叉树 在…

数据结构:带索引的双链表IDL

IDLindexed double list 如图&#xff0c;下方是一个双链表&#xff0c;上方是索引。索引储存为结构体数组&#xff0c;结构体内包括一个指针&#xff0c;和长度。 假设索引只有一个&#xff0c;这时&#xff0c;它应该指向双链表的中间&#xff0c;这样才能提高搜索效率。称…

MyBatis 框架的两大缺点及解决方案

MyBatis 框架的两大缺点及解决方案 1. SQL 编写负担重1.1 缺点概述1.2 解决方案 2. 数据库移植性差2.1 缺点概述2.2 解决方案 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; MyBatis 作为一款广受欢迎的 Java 持久层框架&#xff0c;尽管其…

吴恩达机器学习作业-ex7(主成分分析)

data1 导入库&#xff0c;读取数据&#xff0c;并进行可视化数据 import numpy as np import scipy.io as sio import matplotlib.pyplot as plt#读取数据 path "./ex7data1.mat" data sio.loadmat(path) # print(data.keys()) X data.get("X") # pri…

『C++实战项目 负载均衡式在线OJ』一、项目介绍与效果展示(持续更新)

文章目录 一、项目介绍二、开发环境三、第三方库四、相关技术五、项目整体框架代码目录框架 代码仓库连接 点击这里✈ 一、项目介绍 本项目是实现一个仿 leetcode 的 OJ (Online-Judge&#xff09;系统。更准确的说应该称之为leetcode 的裁剪版。因为本项目只实现了leetcode中…

《计算机网络》(第8版)第9章 无线网络和移动网络 复习笔记

第 9 章 无线网络和移动网络 一、无线局域网 WLAN 1 无线局域网的组成 无线局域网提供移动接入的功能&#xff0c;可分为两大类&#xff1a;有固定基础设施的和无固定基础设 施的。 &#xff08;1&#xff09;IEEE 802.11 IEEE 802.11 是无线以太网的标准&#xff0c;是有固定…

【保姆级系列:锐捷模拟器的下载安装使用全套教程】

保姆级系列&#xff1a;锐捷模拟器的下载安装使用全套教程 1.介绍2.下载3.安装4.实践教程5.验证 1.介绍 锐捷目前可以通过EVE-NG来模拟自己家的路由器&#xff0c;交换机&#xff0c;防火墙。实现方式是把自己家的镜像导入到EVE-ng里面来运行。下面主要就是介绍如何下载镜像和…

【初阶数据结构题目】10. 链表的回文结构

链表的回文结构 点击链接做题 思路1&#xff1a;创建新的数组&#xff0c;遍历原链表&#xff0c;遍历原链表&#xff0c;将链表节点中的值放入数组中&#xff0c;在数组中判断是否为回文结构。 例如&#xff1a; 排序前&#xff1a;1->2->2->1 设置数组来存储链表&a…