cmocka的学习(1)

c++ 单元测试_嵌入式自动化单元测试(2)-Cmocka 介绍cmocka作为开源的单元测试工具,基于google发布的cmockery工具,目前被libssh、csync等软件所采用。作为源代码单元测试工具,其功能强大,且方便使用。本文结合单元测试中的一些规范,对于cmokca的使用进行分析和说明。cmocka基本使用说明cmocka基于google的单元测试工具cmockery,其主要功能有:内存操作检查模拟函数返回值函数入参检查不同类型的验证宏定义... 阅读详情

cmocka

cmocka介绍


cmocka 是一个优雅的C语言单元测试框架,它支持对象的mock。只依赖于标准C库。
可以支持不同的计算机平台和不同的编译器。

cmocka的官网

学习任务

  • 在PC上实现样例测试
  • 在Cortex-M系列MCU中运行

这两个任务主要有两个学习目标

  • 熟悉cmocka中cmake的配置与编写(阅读/理解cmake源码)
  • 熟悉如何使用cmocka编写PC端的模拟测试和MCU实际平台测试(重点)

实践(1)

接下来在Windows 10 的环境下编译和初步测试cmocka。这里需要提前做的准备有:

  • 安装visual studio 2019,可以选择社区版
  • 安装LLVM(clang)的windows版本,LLVM会依赖于visual studio
  • 安装cmake
  • 安装ninja

下载并解压最新版cmocka的源码包

解压后的目录如下:
cmocka源码目录
在该目录下新建一个build目录,并在build目录下打开命令行。
在这里插入图片描述
使用下面几条命令分别测试cmake、clang、ninja是否成功安装

cmake --version

如果可以正常输出版本号,表示cmake安装成功。截图如下:
在这里插入图片描述

clang --version

在这里插入图片描述

ninja --version

在这里插入图片描述

如果上面上个软件都正常安装,接下来可以编译cmocka库和它的一些测试程序了。

首先使用

cmake -G"Ninja" ..\

生成ninja的构建文件,命令执行情况如下(部分截图):
在这里插入图片描述
接下来使用命令

ninja -j8

来编译cmocka的库和测试的可执行文件,执行结果截图如下:
在这里插入图片描述
其中比较多的警告,这里先不管。

然后使用下面的命令来将cmocka生成的库文件安装到指定的目录(这里先不解释具体安装到了那个目录)

ninja install

在这里插入图片描述
然后执行测试程序

ninja test

在这里插入图片描述

这样在PC上的一些编译工作就做完了。

这个过程还是比较简单的。但是过程中我还存在一些疑惑,在接下来的学习中需要解决。疑惑有:

疑惑(接下来需要学习的内容)

  • cmake生成了一个 config.h 文件,生成这个文件的cmake文件是如何编写的?如果更换到其它编译器这个文件会配置成什么样子?
  • 如何将编译器设置为交叉编译器?如MDK的armcc、armclang或者GNU的arm-none-eabi-gcc
  • 如何编写测试程序?测试程序如何加入到测试,然后执行ninja test就自动回执行响应的测试代码?
  • ninja install是否可以由于打包发布程序?如何修改cmake文件实现?
C之(10)CMocka-嵌入式环境下的单元测试实战指南 本文详细介绍了CMocka在嵌入式环境下的单元测试实战指南,涵盖从框架简介到高级Mock技术的全面解析。CMocka作为轻量级单元测试框架,特别适合资源受限的嵌入式系统,支持多平台运行和内存泄漏检测。文章还提供了交叉编译配置、内存优化技巧及持续集成实践,帮助开发者高效进行嵌入式单元测试。 阅读详情

相关推荐

嵌入式开发必备:手把手教你用CMocka搭建C语言单元测试环境(含交叉编译避坑指南)

本文详细介绍了如何在嵌入式开发中使用CMocka搭建C语言单元测试环境,包括环境准备、工具链配置、交叉编译避坑指南及高级测试技巧。CMocka作为轻量级单元测试框架,特别适合资源受限的嵌入式环境,能有效提升代码质量和稳定性。

silver的专栏 983

C之(10)CMocka-单元测试框架使用

CMocka 是一个用于 C 语言的单元测试框架,它是 Check 单元测试框架的一个分支。CMocka 的设计哲学是“只做一件事,但做得好”,这使得它成为一个轻量级、易于使用的工具。它为测试 C 代码提供了一种简单、稳定的方法。轻量级和模块化:CMocka 不需要复杂的设置,不依赖于其他库,且不会大幅度地增加你的项目大小。你可以简单地将其添加到你的 C 项目中,然后开始编写测试。模拟函数:在进行单元测试时,我们通常需要模拟一些函数以便在特定条件下测试我们的代码。

梅花香自苦寒来,宝剑锋从磨砺出。 4437

10个值得深入学习的C语言开源项目:从libuv到SQLite的工程实践

在系统编程和底层开发领域,C语言因其高性能和直接硬件操作能力而成为核心工具。其原理在于通过手动内存管理和指针操作实现对计算机资源的精细控制,这种技术价值体现在构建操作系统、嵌入式系统和高性能服务器等关键基础设施中。应用场景广泛覆盖网络通信、数据库引擎和开发工具链。本文聚焦于libuv、SQLite等兼具实用性与教育性的C开源项目,这些项目展示了跨平台异步I/O、数据库引擎实现等关键技术,为工程师提供了从原理到实践的完整学习路径。

weixin_30824599的博客 414

【单元测试】CMocka单元测试框架(支持mock功能)

1. 前言 本文内容涉及单元测试,需要读者具有单元测试的基础知识,如果没有,请移步至我之前的博客文章: 【单元测试】开篇 【单元测试】Test Double简介 2. CMocka概述 官网:https://cmocka.org/ CMocka 是一款支持mock对象、面向C语言的单元测试框架,CMocka 往往是编译成库的形式,供C单元测试程序链接调用。其前身是谷歌开发的 Cmockery,...

许振坪的专栏 1万+

Python入门之机器学习(非常详细)篇幅拉满,一般人看不完!

什么是机器学习?监督学习 supervised learning;非监督学习 unsupervised learning;半监督学习 semi-supervised learning;强化学习 reinforcement learning;监督学习是不断向计算机提供数据(特征),并告诉计算机对应的值(标签),最后通过大量的数据,让计算机自己学会判断和识别。例如Google Photo,你在APP中输入狗,这时就会弹出与狗相关的图片,这背后使用的算法就是监督学习。

xiaolinyui的博客 2万+

从打印攻击到视频重放:手把手用OULU-NPU训练你的第一个活体检测模型

本文详细介绍了如何使用OULU-NPU数据集训练活体检测模型,以应对打印攻击和视频重放等安全威胁。通过PyTorch框架,从环境准备、数据加载、预处理到模型架构设计,手把手教你构建一个高效的双流网络,结合CNN和LSTM技术,提升模型在多种攻击场景下的检测准确率。

weixin_29092031的博客 388

cmocka的学习(2)

cmocka的学习(2)-配置头文件config.h生成脚本 目录cmocka的学习(2)-配置头文件config.h生成脚本重点函数说明check_include_file(file.ext VAR)check_function_exists(calloc HAVE_CALLOC)check_symbol_exists(snprintf stdio.h HAVE_SNPRINTF)cmocka源码 重点函数说明 check_include_file(file.h VAR) check_function_

github_19061021的博客 1070

Ubuntu 22.04 “软件与更新”装了NVIDIA驱动,WiFi等设备不见了

在Win10装了Ubuntu22.04的双系统,台式机里面有NVIDIA 3080Ti的独立显卡,Ubuntu默认使用的nouveau驱动,需要更换成NVIDIA相应的驱动,在软件和更新里面一键安装了NVIDIA-driver-535-server之后,发现wifi、蓝牙等设备消失了。这个问题的根源据说跟这个nouveau驱动有关,希望linux社区可以解决这个问题。命令安装后 sudo reboot就可以重新看到WiFi以及蓝牙等设备图标了。然后用U盘拷贝到不能上网的Ubuntu22.04系统上,利用。

me_ysd的博客 5857

嵌入式测试驱动开发:embedded-resources的Catch2与cmocka单元测试实践

嵌入式测试驱动开发听起来门槛很高,但当你面对一个把单元测试"焊死"进构建体系的开源仓库时,一切都会变得直观起来。**embedded-resources** 是嵌入式领域知名博客 Embedded Artistry 公开的模板、文档与源码示例集合,它最值得新手学习的,正是那套同时集成 **Catch2** 与 **cmocka** 两大单元测试框架的工程实践。无论你是想给单片机代码补测试,还是想搞

gitblog_00893的博客 714

IB网络下不同租户业务隔离方案

IB(InfiniBand)网络隔离可以在不同的通信模式下实现,其中包括 IPoIB(IP over InfiniBand)通信模式。在 IPoIB 模式下,InfiniBand 网络可以承载 IP 数据包,使得基于 IP 的应用程序能够在 InfiniBand 网络上进行通信。在这种情况下,IB 网络隔离通常指通过配置 Partition Key(PKey)来实现不同的租户或应用程序之间的网络隔离。然而,IB 网络隔离并不仅限于 IPoIB 模式。

guganly的专栏 1529

BUUCTF reverse题解汇总

BUUCTF平台刷题过程中做的一些逆向题解的总结归类

于高山之巅,方见大河奔涌;于群峰之上,更觉长风浩荡。 1万+

如何为PostgreSQL扩展构建完整测试体系?pg_pathman三层测试方案详解

pg_pathman 是一个经典的 PostgreSQL 分区工具扩展,它不仅实现了 RANGE / HASH 分区、分区自动创建等核心功能,更值得学习的是它构建的一套**完整测试体系**:回归测试、cmocka 单元测试与 Python 集成测试三层防线,配合 Docker 一键执行和代码覆盖率统计,堪称 PostgreSQL 扩展测试的"教科书级"范例。本文带你从零看懂这套体系是怎么搭起来的。

gitblog_00338的博客 670

论文笔记:Group Equivariant Convolutional Networks

Group Equivariant Convolutional Networks 1、四个问题 要解决什么问题? 对卷积神经网络进行扩展,并提出一个在特定的变换(旋转、平移等,也可表示为一个特殊的群)下具有等变性的网络。 用了什么方法解决? 提出了一种新的卷积神经网络结构——群等变卷积神经网络(Group equivariant Convolutional Neural Network)...

hongbin_xu的博客 1万+

C程序员应该知道的最好的8个C编程框架

C 编程框架是开发人员必不可少的工具,编程框架可以为构建强大且性能优异的应用程序提供结构化的基础,本文将对 8 个最佳 C 编程框架和库做出简要的介绍,如果您正在寻找适合初学者的 C 编程框架或旨在进行 C 编程框架比较,相信本文可以给您一定的帮助。

whowin 3823

学Simulink——基于Simulink的固态变压器(SST)多级协同控制​

本文介绍了基于Simulink的固态变压器(SST)多级协同控制系统设计与仿真方法。SST作为智能电网关键设备,包含AC-DC整流、DC-DC隔离和DC-AC逆变三级变换器。针对级间耦合问题,提出了能量-功率协同控制策略,通过纵向解耦和横向联动实现稳定运行。详细演示了在Simulink中搭建三级主电路、设计协同控制器(含电网定向控制、功率前馈和虚拟惯性控制)的全过程,并通过负载突变测试验证了系统动态性能(直流母线电压波动<2%)。最后给出了工程部署建议,包括数字控制延时补偿、启动序列设计和代码自动生成

xiaoheshang_123的博客 208

华为OD新系统机试真题 - 配置操作失败数量统计

华为OD机试新系统 4月8号【配置操作失败数量统计】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【配置操作失败数量统计】。

qq_45776114的博客 1165

Ant Design Input.Search 搜索框 loading 状态实战指南:onSearch 期间加载态的正确用法与源码原理

在 Ant Design 中,`Input.Search`(搜索框)是最常用的组合型输入组件之一。本文以仓库中的 [搜索框 loading 演示](https://link.gitcode.com/i/baa86e94a147b8b20d25012ad5b36b0b) 为主线,系统讲解 `loading` 属性在 `onSearch` 场景下的使用方式:包括三种典型形态(默认图标按钮、`enter

gitblog_00208的博客 148

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

学习使用meson+ninja构建C语言工程(含单元测试)

Meson是一个高效、易用且跨平台的构建系统,主要用于描述和管理项目的构建过程。Meson 使用简洁的配置语言来定义项目的构建规则,并生成 Ninja 构建文件以实际执行构建任务。Ninja是一个轻量级的构建工具,专注于快速并行构建。它通过构建任务的依赖关系图,实现高效的并行构建,从而加速项目的构建过程。CMocka则是一个适用于 C 语言的单元测试框架,用于编写和执行单元测试,验证代码的正确性。

ljyfree的专栏 1811

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

单元测试 C++ 框架 Google Test

Google Test 是 Google 提供的一个用于单元测试 C++ 程序的框架。但如果你是想在 C 语言项目中使用测试框架,Google Test 本身是不支持 C 语言的,因为它是基于 C++ 的特性设计的。不过,你可以通过一些技术手段使 C 代码在 C++ 项目中可测试,或者选择其他更适合 C 语言的测试框架。如...

weixin_42510608的博客 209

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

手写环形缓冲区:embedded-resources源码教你无取模与线程安全两种实现

环形缓冲区(Circular Buffer,也叫 Ring Buffer)是嵌入式开发中最常用的数据结构之一,从 UART 串口收发、DMA 数据搬运到 RTOS 消息队列,到处都有它的身影。embedded-resources 项目提供了完整的环形缓冲区源码,包含**基础取模版、无取模优化版、无取模线程安全版**三种 C 实现,外加一个 C++ 模板版本,非常适合新手对照学习。本文将带你逐层剖析

gitblog_00315的博客 1100

嵌入式开发必备:awesome-c精选工具与资源全攻略

awesome-c 是一个精心策划的纯C开源项目列表,汇集了各类高质量的C语言工具、库和资源。对于嵌入式开发者而言,这个项目就像一个宝藏工具箱,提供了从基础数据结构到高级图形处理的全方位支持。无论是刚入门的新手还是经验丰富的工程师,都能在这里找到提升开发效率的必备工具。 ## 为什么选择awesome-c? 在嵌入式开发领域,C语言以其高效性和接近硬件的特性占据着不可替代的地位。awesome

gitblog_00893的博客 1175

网络安全最全AFL++简单学习_afl++ iot

AFL++作为一个覆盖率引导的模糊测试工具,拥有自己的变异算法,由于其使用广泛,因此相关教程及实验资料较多,学习使用的曲线平滑,并且其目前更新频率较高,对LLVM的支持以及各类Sanitizer的支持也使得其能更快的发现更多的漏洞。其对于闭源应用程序(使用-Q参数开启QEMU模式)和有源码的应用程序都可以进行FUZZING,但是对于复杂的程序会碰见路径爆炸或执行速度较慢的问题,后者可以通过AFL++的持久模式来进行加速,此时需要使用者对被测程序拥有一定的了解(可能涉及到逆向和源码修改的问题)。

2401_84300859的博客 1911

2024年C C++最全catch2测试框架学习_catch2中的单元测试test_case,2024年最新分布式架构演进+相关笔记参考

section使用宏。

2401_84976176的博客 402

cmock学习笔记20190821

英文教程1: unity+cmock基础篇 教程 http://www.electronvector.com/blog/add-unit-tests-to-your-current-project-with-ceedling 配套源码 https://github.com/ElectronVector/add-ceedling-to-existing-...

阿群的笔记(同步备份自简书) 711

从导出到导入:快速掌握DBX的5个数据迁移场景

DBX 是一款轻量级跨平台数据库客户端,支持 MySQL、PostgreSQL、SQLite 等 100+ 数据库。本文教你在 5 个常见场景下完成表导出、文件导入与跨库传输,并在任务中断时知道如何排查和取消。 ## 首次上手:建立可用连接 第一次打开 DBX 就要做导出或导入时,前提是有测通的连接。类型下拉框覆盖 100+ 数据库类型,可按关键词筛选。 1. 点击顶部菜单"新建连接" 2.

gitblog_09779的博客 500

测试框架比较

UiAutoMator Appium Calabash 跨平台 不支持 支持 支持 学习成本 使用java,需要熟悉api 支持多语言,较多中文文档 自然语言,文档较少

乌龟赛跑 541
上一篇: python实现文本编码转换
下一篇: cmocka的学习(2)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值