什么是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等测试状态函数

Cmockery学习的更多相关文章

  1. 最值得学习的10个C语言开源项目

    最好别下载最新版,因为代码量比较大,可以下载很早的版本 搜索词:开源 C Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我 ...

  2. 值得学习的C语言开源项目

    值得学习的C语言开源项目   - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工 ...

  3. 转: 最值得阅读学习的 10 个 C 语言开源项目代码

    from: http://www.iteye.com/news/29665 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同 ...

  4. 转:最值得学习阅读的10个C语言开源项目代码

    阅读优秀代码是提高开发人员修为的一种捷径……  1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试 ...

  5. 嵌入式 十个最值得阅读学习的C开源项目代码

    开源世界有许多优秀的开源项目,我选取其中十个最优秀的.最轻量级的C语言的项目,希望可以为C语言开发人员提供参考. 十个最值得阅读学习的C开源项目代码 1. Webbench 2. Tinyhttpd ...

  6. 十个最值得阅读学习的C开源项目代码

    1. Webbench Webbench 是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以 模拟3万个并 ...

  7. 推荐学习c语言的几个开源项目

    1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连 ...

  8. 值得学习的C/C++开源框架(转)

    值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...

  9. 【伯乐在线】最值得阅读学习的 10 个 C 语言开源项目代码

    原文出处: 平凡之路的博客   欢迎分享原创到伯乐头条 伯乐在线注:『阅读优秀代码是提高开发人员修为的一种捷径』http://t.cn/S4RGEz .之前@伯乐头条 曾发过一条微博:『C 语言进阶有 ...

  10. C++的一些不错开源框架,可以学习和借鉴

    from https://www.cnblogs.com/charlesblc/p/5703557.html [本文系外部转贴,原文地址:http://coolshell.info/c/c++/201 ...

随机推荐

  1. Android studio 提示“android qemu-system-i386.exe停止工作”

    解决方案 android studio 关闭AVD时提示"android qemu-system-i386.exe停止工作" 配置虚拟机时"Graphics"选 ...

  2. springboot获取七牛云空间文件列表及下载功能

    原文摘自:https://www.codernav.com 第一步:新建springboot项目,引入jar包,其中hutool-all是工具类,用来写文件下载,可以随意更换. <!--工具类- ...

  3. javascript现代编程之四——数值的进制和表示方法

    在JavaScript中,数值可以以不同的进制表示: 十进制:这是我们最常用的进制系统.例如:let decimal = 123; 二进制:数值前面加上 0b 或者 0B.例如:let binary ...

  4. 力扣197(MySQL)-上升的温度(简单)

    题目: 表: Weather 编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id . 返回结果 不要求顺序 . 查询结果格式如下例. 解题思路: 方法一:使用窗口函数la ...

  5. 力扣633(java&python)-平方数之和(中等)

    题目: 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c . 示例 1: 输入:c = 5输出:true解释:1 * 1 + 2 * 2 = 5示例 2: 输 ...

  6. 阿里云RemoteShuffleService 新功能:AQE 和流控

    ​简介:阿里云EMR 自2020年推出 Remote Shuffle Service(RSS)以来,帮助了诸多客户解决 Spark 作业的性能.稳定性问题,并使得存算分离架构得以实施.为了更方便大家使 ...

  7. KubeDL HostNetwork:加速分布式训练通信效率

    ​简介:ubeDL 为分布式训练作业带来了 HostNetwork 网络模式,支持计算节点之间通过宿主机网络相互通信以提升网络性能,同时适应 RDMA/SCC 等新型高性能数据中心架构的网络环境,此外 ...

  8. [FAQ] Windows 终端 `git diff` 出现 LF 空格 ^M 符号, 处理方式

      可能是终端内的换行配置和 IDE 当中的不一致. 比如 PHPStorm 的: Git 终端使用 git config core.autocrlf 查看是 true 还是 false. 是 tru ...

  9. 2024 年最值得推荐的 7 个 Vue3 组件库

    你好,我是 Kagol. Vue 是一款易学易用,性能出色,适用场景丰富的渐进式 JavaScript 框架,深受广大开发者的喜爱,Vue3 更是推出了 Composition API,让逻辑复用更友 ...

  10. MyBatis源码之MyBatis中SQL语句执行过程

    MyBatis源码之MyBatis中SQL语句执行过程 SQL执行入口 我们在使用MyBatis编程时有两种方式: 方式一代码如下: SqlSession sqlSession = sqlSessio ...