首页 > 其他分享 >Cmockery学习

Cmockery学习

时间:2023-09-08 16:57:28浏览次数:34  
标签:assert sub Cmockery int 学习 add test 函数

什么是cmockery?

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

什么是单元测试?

单元测试就是测试一个系统的最小实现单元,往往是函数

示例解析

#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmockery.h>
//测add方法
void test_add(void **state) {
	assert_int_equal(add(3, 3), 6); //这个叫断言宏,简单地说就是通过assert这个函数判断括号内的,真就忽略继续,假就停
	assert_int_equal(add(3, -3), 0);
}
//测sub方法
void test_sub(void **state) {
	assert_int_equal(sub(3, 3), 0);
	assert_int_equal(sub(3, -3), 6);
}
int main(int argc, char *argv[]) 
{
    const UnitTest tests[] = { //这个是待测试的所有方法列表,每一个待测试的方法都要写一个test_xxx并用unit_test包裹
        unit_test(test_add),
		unit_test(test_sub),
    };
    return run_tests(tests); //所有的待测试方法列表(数组)传入run_tests函数,一起跑
}

  • 不能显示断言成功的表达式,因为是基于assert()的
  • cmokery会在一个进程中测试全部用例,所以当有用例失败导致内存问题时,后面的用例都没法测了,所以对malloc() 、 calloc() 和free() 的调用分别替换成test_malloc() 、test_calloc() 和 test_free()

单元测试最好能脱离原函数的环境

我现在有个函数是a,里面调用了b或者需要用到c数据库的数据,那么测试a就不要涉及bc,可以把调用bc的地方直接替换为相应数据

  • Cmockery 提供了给模拟函数的每个测试用例存放返回值的功能,使用的是 will_return() 函数。然后,这些值将通过每个模拟函数调用mock() 返回

  • 传给will_return() 的值,将分别添加到每个函数所特有的队列中去。连续调用 mock() ,将从函数的队列中移除一个返回值。

此外

  • 还有expect_xxx检测参数,
  • test_error等测试状态函数

标签:assert,sub,Cmockery,int,学习,add,test,函数
From: https://www.cnblogs.com/xsl-blogs/p/17676859.html

相关文章

  • open代码学习
    ADC用宏定义c++编译器兼容c程序#ifdef__cplusplusextern"c"{}枚举类型传值typedefenum{CHANNAL_1=1;CHANNAL_2=2;CHANNAL_3=3;}a;voidfunc(ax){xxx}//调用方法如下aa1=CHANNAL_1;func(a1);电源管理......
  • 《PROMPT2MODEL: Generating Deployable Models from Natural Language Instructions
    一、Introduction传统上,从零开始构建一个自然语言处理(NLP)模型是一项重大任务。一个寻求解决新问题的NLP从业者需要定义他们的任务范围,找到或创建目标任务领域的行为数据,选择合适的模型架构,训练模型,通过评估评估其性能,然后将其部署到实际应用中。Prompt2Modelisaframeworkfo......
  • CS61B学习日记2
    今天学习了B树和红黑树的概念总结:1.在cs61b中B树分为2-3树和2-3-4树:其中主要的关键点是定L的大小。L是指一个节点最多拥有的元素个数。B树的不变量(我记作为限制):2.1)每个叶子结点到根的路径数相同。2.2)每个包含元素个数为k的非叶子结点,其必有链接k+1个叶子结点2.本课......
  • 安装强化学习包gym报错问题及解决方法
    安装命令pipinstallgymnasium[all]如遇如下报错error:command'swig.exe'failed:Nosuchfileordirectory[endofoutput]note:Thiserrororiginatesfromasubprocess,andislikelynotaproblemwithpip.ERROR:Failedbuildingwheelfo......
  • 机器学习算法原理实现——使用梯度下降求解Lasso回归和岭回归
    本文本质上是在线性回归的基础上进行扩展,加入了正则化而已!机器学习算法原理实现——使用梯度下降求解线性回归 正则化在机器学习中是一种防止过拟合的技术,它通过在损失函数中添加一个惩罚项来限制模型的复杂度。举一个实际的例子,假设你正在训练一个机器学习模型来预测房价。你......
  • Python学习日记 京东工单信息获取
    importrequestsimportcsvimportrandomf=open('vc.csv',mode='a',encoding='utf-8',newline='')csv_writer=csv.DictWriter(f,fieldnames=['客户姓名','订单编号','pin'])csv_wri......
  • 学习鸿蒙应用开发
    鸿蒙应用开发是华为公司推出的一种全场景分布式操作系统,它提供了丰富的开发框架和工具,用于开发应用程序。应用程序生命周期:在鸿蒙应用开发中,应用程序的生命周期是指应用程序从启动到关闭的整个过程。鸿蒙应用的生命周期包括以下几个阶段:应用创建:当用户启动应用程序时,系统会创建应......
  • Tomcat架构学习
    1、Tomcat的两个核心功能:处理Socket连接,负责负责网络字节流与Request和Response对象的转化。加载和管理Servlet,以及处理具体Request请求。Tomct设计了两个核心组件连接器(Connector)和容器(Container)来分别做这两件事情。连接器负责对外交流,容器负责对内处理。单独的连接器或者容......
  • 学习使用双指针(leetcode)
    一、K和数对的最大数目(JAVA)给你一个整数数组nums和一个整数k。每一步操作中,你需要从数组中选出和为k的两个整数,并将它们移出数组。返回你可以对数组执行的最大操作数。示例1:输入:nums=[1,2,3,4],k=5输出:2解释:开始时nums=[1,2,3,4]:-移出1和4,......
  • Go学习笔记3
    九、错误处理1.defer+recover机制处理异常错误展示错误:发现:程序中出现错误/恐慌以后,程序被中断,无法继续执行。错误处理/捕获机制:内置函数recover:2.自定义错误需要调用errors包下的New函数:函数返回error类型3.panic有一种情况:程序出现错误以后,后续代码就没有必要执......