几种测试框架的特性比较

几种测试框架的特性比较

Cmockery

cmockery 是 google 发布的用于C单元测试的一个轻量级的框架,可以通过终端、log、xml和http格式输出测试报告

优点:

  • 免费开源,google 提供技术支持

  • 轻量级的框架,使测试更加快速简单

  • 不使用复杂的编译器特性,对老版本的编译器来讲兼容性好

  • 并不强制要求待测代码必须依赖 C99 标准,对许多嵌入式系统的开发有帮助

  • 支持模拟对象

缺点:

  • 不支持测试夹具,不好建立测试用例之间的联系

  • 依赖性强,需要依赖别的一些库

  • 最新的一次更新时间是2016年

使用的开源项目:

  • Nmap - 一个开源的网络探测和安全审计工具,用于扫描主机和端口

  • libvirt-qemu - 一个用于管理QEMU虚拟机的开源库,支持多种虚拟化技术

  • libguestfs - 一个用于访问和修改虚拟机镜像的开源库,支持多种虚拟化技术

  • libcurl - 一个开源的网络传输库,支持多种协议和功能

  • libsoup - 一个开源的HTTP客户端/服务器库,用于Web应用程序的开发

Cutest

cutest是一个轻量级的测试框架,可以通过终端、log、xml和tap格式输出测试报告

优点:

  • 源码简单,开源免费,且编译只需导入CuTest.c和CuTest.h

  • 无依赖性,易于集成

缺点:

  • 功能有限,无法检测内存泄露

  • 不支持测试夹具,也可能无法满足一些复杂的测试需求

  • 最新的一次更新时间是2013年

使用的开源项目:

  • Redis - 一个开源的内存键值数据库,支持多种数据结构和持久化功能

  • libcue - 一个开源的CUE文件解析库,用于提取音频CD中的音轨信息

  • libdivecomputer - 一个开源的潜水计算机通讯库,用于与潜水计算机通讯

  • rumpkernel - 一个开源的微内核操作系统,用于运行操作系统功能和应用程序

  • libuEv - 一个开源的事件循环库,用于实现异步IO等功能

CppUTest

是一个c/c++测试框架,可以通过终端、xml、http、tap输出测试报告

优点:

  • 支持模拟对象(打桩)

  • 拥有丰富的功能,提供测试夹具,参数化测试,测试覆盖率分析等

  • 易于使用,API较为简单

缺点:

  • 性能不够优化,应用于复杂的测试的话测试时间可能较长

  • 社会支持少,文档不够详细,遇到问题难处理,需要自己分析解决

使用的开源项目:

  • FreeRTOS - 一个开源的实时操作系统,用于嵌入式系统和物联网设备

  • Arduino - 一个开源的硬件和软件平台,用于快速开发物联网和嵌入式系统

  • OpenCV - 一个开源的计算机视觉库,用于处理各种图像和视频数据

  • Wireshark - 一个开源的网络协议分析器,用于分析和调试网络通信

  • OpenMPI - 一个开源的消息传递接口库,用于并行计算和高性能计算

  • OpenSceneGraph - 一个开源的3D图形引擎,用于可视化和模拟各种场景

  • CppCMS - 一个开源的Web应用程序框架,用于开发高性能的Web应用程序

Cunit

是一个轻量级的c语言测试框架,入侵性小,支持终端、xml、html、tap输出测试报告

优点:

  • API简单易于使用

缺点:

  • 不支持模拟对象、参数化测试

  • 版本较老

使用的开源项目:

  • libxml2:一个用于解析和操作XML文档的C语言库

  • mpg123:一个用于解码MP3音频文件的C语言库

  • libtiff:一个用于读写TIFF图像格式的C语言库

  • libcurl:一个用于进行网络通信的C语言库

  • libpng:一个用于读写PNG图像格式的C语言库

Cmocka

是一个用于c语言测试的轻量级测试框架,支持终端、xml、subunit输出格式

优点:

  • API简单,易于使用

  • 只需要标准C库

  • 支持模拟对象(打桩)

缺点:

  • 文档较少

使用的开源项目:

  • Redis:一个开源的内存数据库,使用C语言编写

  • libgit2:一个用于操作Git版本控制系统的C语言库

  • systemd:一个用于管理Linux系统进程的C语言程序

  • libssh:一个用于进行SSH通信的C语言库

  • OpenLDAP:一个开源的LDAP实现,使用C语言编写

Check

用于测试c的轻量级测试框架,支持终端、tap、subunit输出报告格式

优点:

  • API简单,易于开发

  • 支持测试夹具

缺点:

  • 性能不佳,测试时间长

  • 不支持模拟对象

使用的开源项目:

  • GLib:GLib是一个C语言开发的通用工具库,包括数据结构、线程、内存管理、文件I/O等功能

  • GStreamer:GStreamer是一个开源的多媒体框架,用于处理音频、视频、流媒体等数据

  • Git:Git是一个分布式版本控制系统,广泛用于软件开发和版本管理

  • libvirt:libvirt是一个虚拟化管理工具,支持多种虚拟化技术,包括KVM、Xen、LXC等

  • OpenCV:OpenCV是一个计算机视觉库,提供多种图像处理和分析功能

criterion

用于测试c的轻量级测试框架

优点:

  • 支持测试夹具,参数化测试,覆盖率测试

  • API简单,易于使用

  • 支持自动化测试

缺点:

  • 不支持模拟对象

使用的开源项目:

  • Redis:Redis是一个开源的键值存储系统,支持多种数据结构和持久化方式

  • libgit2:libgit2是一个开源的Git库,提供多种Git操作和功能

  • SDL2:SDL2是一个跨平台的多媒体库,提供多种图形、音频、输入等功能

  • GLFW:GLFW是一个轻量级的窗口和输入管理库,用于OpenGL应用程序开发

  • stb:stb是一个单文件的C语言图像库,提供多种图像处理和加载功能

gtest

是google开发的c++测试框架,支持单元测试、集成测试、功能测试,支持终端、xml、html、json格式输出报告

优点:

  • 功能强大

  • 文档齐全,API简单,易于使用

  • 支持测试夹具,参数化测试,覆盖率测试

缺点:

  • 不支持模拟对象,需要结合其他的mock框架使用

  • 测试速度较慢

  • 学习成本高

使用的开源项目:

  • TensorFlow:TensorFlow是一个开源的机器学习框架,由Google开发

  • Chromium:Chromium是一个开源的Web浏览器项目,由Google开发

  • LLVM:LLVM是一个编译器基础设施项目,包括编译器前端、后端、优化器等组件

  • ROS:ROS是一个机器人操作系统项目,用于开发机器人软件和控制系统

  • OpenCV:OpenCV是一个计算机视觉库,提供多种图像处理和分析功能

其他因素

gtest是google发布的免费测试框架,功能性强,主流测试框架,在github上很多人使用,星数高达29k,足以说明它的广泛使用性

cmockery也是google发布的测试框架,主要特性是轻量级,上手简单快速

主流的测试框架主要有gtest、criterion、cunit和check

你可能感兴趣的:(嵌入式,单元测试)