在LINUX中CppUnit应用指南

LTC2990电池监控芯片I²C驱动开发与多通道同步采样实践 电池监控是嵌入式电源管理系统的核心环节,其本质依赖高精度模拟信号采集、数字转换与实时状态评估。LTC2990作为集成电压/电流/温度三合一的专用监控IC,通过真差分输入、内置基准和I²C数字接口,显著简化了SOC/SOH估算的硬件链路。其技术价值在于以单芯片替代传统ADC+运放+传感器组合,在宽压(2.7–36 V)、高共模(80 V)场景下保障工业级测量可靠性。典型应用于电动工具、车载BMS、UPS及便携式储能设备的电池健康监测子系统。本文聚焦LTC2990底层驱动实现,涵盖I²C时序约束、寄存器原子读写 阅读详情

1                                   引言

1.1     摘要

简单描述CppUnit在Linux系统下的使用方法,以便在单元测试过程中能够提高正确率和效率。本文仅仅是把一部分英文的说明文档写成中文的。

1.2 术语、定义和缩略语

序号

术语或缩略语

说明性定义

1

CppUnit

一个用于单元测试的开源软件

2

 

 

 

 

 

1.3 安装CppUnit

首先,需要到这个(http://sourceforge.net/project/showfiles.php?group_id=11795)地址下载一个CppUnit安装程序。该地址不仅有CppUnit安装程序,还有CppUnit的说明文档。本文以CppUnit1.12.0版进行说明。

有了压缩包了,就可以进行解压缩安装了,在压缩包所在目录下执行如下命令:

tar –xzfcppunit-1.12.0.tar.gz

cd cppunit-1.12.0

./configure

make

make check

make install

几乎每条命令都要执行几分钟。到此就已经完成安装了。

如果写好程序后进行编译,编译器报告没有库文件,则需要把/usr/local/lib下和cppunit有关的几个库文件拷贝到/usr/lib目录下。

2      建立CppUnit测试用例

2.1 建立一个被测函数

class Complex

{

       friendint operator==(const Complex &a, const Complex &b);

       friendComplex operator+(const Complex &a, const Complex &b);

       doublereal, imaginary;

public:

       Complex(doubler, double i = 0):real(r), imaginary(i){}

};

 

int operator==(const Complex &a, constComplex &b)

{

       return(int)(a.real==b.real && a.imaginary==b.imaginary);

}

Complex operator+(const Complex &a,const Complex &b)

{

       Complexc(0, 0);

       c.real= a.real+b.real;

       c.imaginary= a.imaginary+b.imaginary;

       returnc;

}

       假设Complex就是即将要测试的类,测试两个运算符重载。

2.2 建立一个简单的测试用例

建立CppUnit测试类,需要继承TestCase类。我们需要作的主要就是重写setUp()和tearDown()函数,并根据被测函数写测试函数。其中,setUp()函数主要用于初始化变量;tearDown()做善后处理,一般用于释放堆空间。OK,让我们写一个简单的测试类。

class ComplexNumberTest:publicCppUnit::TestCase

{

private:

       Complex*m_10_1, *m_1_1, *m_11_2;

public:

       voidsetUp();

       voidtearDown();

       voidtestEquality();

       voidtestAddition();

};

 

void ComplexNumberTest::setUp()

{

       m_10_1= new Complex(10, 1);

       m_1_1= new Complex(1, 1);

       m_11_2= new Complex(11, 2);

}

 

void ComplexNumberTest::tearDown()

{

       deletem_10_1;

       m_10_1= NULL;

       deletem_1_1;

       m_1_1= NULL;

       deletem_11_2;

       m_11_2= NULL;

}

///测试函数operator==()

void ComplexNumberTest::testEquality()

{

       CPPUNIT_ASSERT(*m_10_1== *m_10_1);

       CPPUNIT_ASSERT(!(*m_10_1== *m_11_2));

}

///测试函数operator+()

void ComplexNumberTest::testAddition()

{

       CPPUNIT_ASSERT(*m_10_1+*m_1_1== *m_11_2);

}

       函数都写好了,其中CPPUNIT_ASSERT()是一个类似于断言的宏定义,根据括号内的逻辑语句是true或false得出不同的结果,至于所得结果的用法,下面介绍。

需要注意的是,不要自作聪明的给这个类加入构造函数、复制构造函数、赋值函数。任何不必要的函数都会让程序编译不过去。

2.3 使用TestSuite

你不希望用上小节的类,一条一条的在main函数中调用执行吧?这样的工作量将大的惊人。我们有更好的办法,把它们都加入到一个TestSuite中,直接执行这个suite的run()成员函数就可以了,下面是加入方法:

CppUnit::TestSuitesuite;

CppUnit::TestResultresult;

suite.addTest(newCppUnit::TestCaller<ComplexNumberTest>(

                            “testEquality”,

                            &ComplexNumberTest::testEquality));

suite.addTest(newCppUnit::TestCaller<ComplexNumberTest>(

                            “testAddition”,

                            &ComplexNumberTest::testAddtion));

suite.run(&result);

       首先定义一个suite,然后定义一个result,result用于接收测试的执行结果。

用addTest()函数来添加测试用例,尖括号中是测试类。内层圆括号的第一个参数是一个字符串,当测试出现异常时,将输出这个字符串,以表示该部分的测试不成功;第二个参数是测试类中函数的地址。其他部分照搬。

执行run(&result)函数。这样还不可以,虽然测试函数被执行了,但无法得到任何结果。如果是这样执行,我们得到的仅仅是CppUnit这个软件工作正常,要想得到软件的测试结果,还要用到下一小节介绍的一个类。

2.4 使用TestRunner

我们接下来要做的就是,把上小节的代码段装到一个成员函数中。需要在测试类中以静态方式定义该函数。我们在ComplexNumberTest类中加入如下函数:

staticCppUnit::Test* suite()

{

       CppUnit::TestSuite *suiteOfTests = newCppUnit::TestSuite("ComplexNumberTest");

       suiteOfTests->addTest(newCppUnit::TestCaller<ComplexNumberTest>

              ("testEquality",&ComplexNumberTest::testEquality));

       suiteOfTests->addTest(newCppUnit::TestCaller<ComplexNumberTest>

              ("testAddition",&ComplexNumberTest::testAddition));

       return suiteOfTests;

}

       可以看出,这里没有用到result,也没有执行run()函数,而是直接返回的suite对象。用TestRunner对象来接受静态函数的返回值就可以了。主函数如下:

intmain()

{

       CppUnit::TextUi::TestRunner runner;

       runner.addTest(ComplexNumberTest::suite());

       runner.run();

       return 0;

}

       主函数中首先定义了一个runner对象,用该对象的addTest()函数把suite()函数加入到runner对象中,执行run()函数。该runner.run()函数不仅有suite.run()函数的功能,还能给出输出结果,报告测试成功还是测试出错以及出错的位置。

2.5 使用宏

有一种更简单的方法可以替代2.3小节的代码,那就是使用宏。我们可以把ComplexNumberTest中的静态函数suite()删除,用以下四条宏语句来代替这个函数:

CPPUNIT_TEST_SUITE(ComplexNumberTest);

CPPUNIT_TEST(testEquality);

CPPUNIT_TEST(testAddition);

CPPUNIT_TEST_SUITE_END();

       其中,第一条宏的参数是测试类的名字,中间两条宏的参数是测试函数,有多少个测试函数,就要有多少个CPPUNIT_TEST()宏。最后一条宏是与第一条配对的。

       除此之外,还有许多可用的宏,比如需要测试一个函数是否能够抛出异常,可以用宏CPPUNIT_TEST_EXCEPTION(testMethod,ExceptionType),其中testMethod是测试函数,ExceptionType是异常类型;测试一个函数是否会失败,可以用CPPUNIT_TEST_FAIL(testMethod),这个宏与CPPUNIT_TEST()做相反的操作。

2.6 编译该测试文件

把以上代码复制粘贴到一个cpp文件中进行编译还不能通过,需要引入如下头文件:

#include<cppunit/TestRunner.h>

#include<cppunit/TestResult.h>

#include<cppunit/extensions/HelperMacros.h>

#include<cppunit/ui/text/TestRunner.h>

       编译时,需要引用两个库文件,可以用如下命令进行编译:

g++mytest.cpp –o mytest –lcppunit –ldl

       命令中,mytest.cpp为源文件,mytest为目标文件,cppunit和dl为库文件。

3      备注

如果想了解CppUnit更多的内容,可以到如下地址下载官方文档http://sourceforge.net/project/showfiles.php?group_id=11795

本文作者:甜菜晒干了。如果有什么错漏之处,请与我联系:daobanyemi@sina.com


浅谈python反序列化漏洞 0x01 python序列化与反序列化 Python 的序列化和反序列化是将一个类对象向字节流转化从而进行存储和传输,然后使用的时候再将字节流转化回原始的对象的一个过程。python中的序列化操作是通过pickle模块,而该模块主要包含l dumps将dict转化为str格式,loads将str格式转化为dict格式。 dump和load与文件操作结合起来, pickle.dump(obj, f... 阅读详情

相关推荐

避开这些坑!智鼎MAP性格测试高分指南(附互联网/国企/外企答题模板)

本文深入解析智鼎MAP职业性格测试的核心逻辑与常见陷阱,提供针对互联网、国企、外企三大行业的差异化答题策略与实战模板。帮助求职者理解测试本质,避开追求完美人设、忽视程度副词等心理陷阱,塑造与目标岗位高度匹配的职业画像,从而在招聘关键环节脱颖而出。

rainy的博客 994

Linux下CppUnit的安装与使用

一、系统环境: Red Hat Enterprise Linux4.0  Kernel:2.6.9-5 EL 二、Red Hat Enterprise Linux4.0下CppUnit1.12.0的安装取得:http://sourceforge.net/projects/cppunit/ 最新的稳定版本为1.12.0。下载:cppunit-1.12.0.tar.gz。解压缩: tar

1711

你的App合规吗?手把手教你用Camille生成隐私调用报告给老板看

本文详细介绍了如何使用开源工具Camille进行Android App隐私合规检测,并生成高管易懂的隐私调用报告。通过动态插桩技术和多维度分析,Camille能有效识别高风险API调用,并将其映射到具体法律条款,帮助技术团队与法务、产品等非技术部门高效沟通,确保App符合《个保法》等法规要求。

weixin_33726318的博客 422

linux cpp 例子,linux下cppunit的安装和使用

linux下cppunit的安装和使用上一篇 /下一篇 2009-10-14 00:10:59/ 个人分类:测试资料一、 CppUnit linux 安装CppUnit测试框架的源代码可以到 [url]http://sourceforge.net/projects/cppunit/[/url] 上下载,当前最高版本为cppunit-1.12.0.tar.gz。 上传到linux服务...

weixin_42524842的博客 650

Hi3516CV610开发板ISP调优实战——从在线调试到参数固化部署全流程

本文详细介绍了Hi3516CV610开发板ISP参数从在线调试到固化部署的全流程。针对调试参数重启丢失的痛点,重点解析了如何从PQTools安全导出参数、进行格式转换与适配,并通过烧录工具或系统更新两种路径将参数永久固化至Flash。最后提供了双重验证与常见问题排查方法,确保调优效果在产品中稳定生效。

weixin_29169505的博客 426

Cursor集成Claude 4.6免费版:本地IDE合规调用指南

大语言模型编程助手(LLM Copilot)已成为现代开发标配,其核心能力依赖于上下文理解、代码推理与结构化输出等关键技术原理。Anthropic官方提供的Claude系列模型,尤其Claude 4.6,凭借200K超长上下文、tool use函数调用和严格可控的API设计,在工程实践中展现出显著技术价值。该能力可无缝嵌入本地IDE环境,支撑代码解释、跨文件分析、单元测试生成等高频开发场景。本文聚焦Cursor这一开源可审计IDE,详解如何合规复用Anthropic免费tier接口(/v1/messages

weixin_34095889的博客 537

Linux下安装cppunit

cppunit的介绍页面在这里,源码下载在这里 下载源码包: 从这里选择一个版本的cppunit下载,目前的版本是1.12.1 注意:不要在sourceforge-cppunit主页直接下载“cppunit-cvs-repo-archive.tar.bz2”,那个不是我们要的! 编译安装: 解压,进入解压后的目录./configuremakemake instal

yasi_xi的专栏 4851

STM32F407 FreeRTOS+LVGL移植实战:从驱动适配到性能优化

本文详细介绍了在STM32F407开发板上移植FreeRTOS和LVGL的实战经验,涵盖硬件准备、驱动适配、性能优化等关键步骤。通过TFTLCD屏幕驱动优化、DMA加速和任务优先级调整,显著提升界面流畅度,为嵌入式GUI开发提供实用解决方案。

weixin_29190651的博客 632

Linux下Cppunit的简单运用

操作系统: 软件版本:cppunit-1.12.0.tar.gz 代码调试通过   一、           CppUnit的原理 先简单介绍几个CppUnit的基本术语: 1、Fixture:一个或一组测试用例的测试对象。可以是你要测试的对象或者函数。 2、TestCase:测试用例。是对测试对象的某个功能或流程编写的测试代码。对一个Fixture,可能有多个测试用例。 3、Te

把握自己。 1966

【3D目标检测】激光雷达和相机联合标定(一)——ROS同步解包

激光雷达和相机联合标定(一)——ROS同步解包

qq_44703886的博客 4235

自定义css属性实现渐变边框动画

自定义cs属性实现渐变边框动画

lemon的博客 1875

Linux 下 CppUnit的安装与使用

OS:ubuntu9.04CppUnit:cppunit-1.12.11、下载、解压     到http://sourceforge.net/projects/cppunit下载,然后复制cppunit-1.11.6.tar.gz到/usr/src;       运行:tar -xf cppunit-1.10.2.tar.gz 解压缩;或者在WIN下直接解压

Leeiee的专栏 7077

SAP-ABAP:字符与数值类型转换详细指南

SAP-ABAP:字符与数值类型转换详细指南

baidu_35680696的博客 1480

Linux下使用CppUnit组织单元测试

本文介绍CppUnit单元测试的一些基础知识和使用方法,其中的一些样例来自于源码,安装和一些基础介绍也可以参见文献[1,2]。

cjf_wei的博客 1496

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

CppUnit 安装和使用

[1]. 首先下载CppUnit自动测试工具(Linux 和 Windows 都可以用)http://sourceforge.net/projects/cppunit/ cppunit-1.12.1.tar.gz然后解压。gunzip   [2]. LINUX    进入解压后的目录, 运行命令    (要授执行权限: chown 777 xxx )    ./config

txwcan999的专栏 1927

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

CPPUNIT安装和使用(linux)

库安装 下载cppunit-1.12.0.tar.gz 标准的解压加安装:   $ tar xzvf cppunit-1.12.0.tar.gz    $ cd cppunit-1.12.0   $ ./configure   $ make   $ make install 配置共享库   $ vi /etc/ld.so.conf     //在文件中添加 /usr/loca

小庞(android/java/PHP/Web/linux/mysql) 2193

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

netbeans linux cunit cppunit 使用

源码编译CUnit 以及CppUnit。   查看文件   安装成功。   我使用的是netbeans 开发工具,远程连接centos进行C/C++的开发。 Cunit 项目文件 配置cunit静态连接库及运行环境 编写测试文件: /* * File: CUnitTest.c * Author: Vicky.H * * Created on

噬日者 1776

cppunit linux,Linux中使用CppUnit工具

介绍Linux平台下CppUnit使用方法Linux中使用Cpp Unit单元测试工具1. 下载安装Cpp Unit:1). 从http://www.wendangwang.com/projects/cppunit 下载CppUnit的源码包,然后解压,生成cppunit文件夹。2). 进入cppunit文件夹,依次运行以下命令:A../configure // ...

weixin_30955739的博客 324

CPPUnit 使用指南[Unix]

单元测试工具CPPUnit在Windows平台下使用图形界面,操作非常直观;但在Unix平台下,就需要花点功夫配置一番: 1.下载文件: 本人使用的是cppunit-1.12.0.rar 版本,可以在以下地址下载(http://u.115.com/file/f6a03bec8)共享有效期有一个月,这软件在网上也好找。如以上地址过期,未找到合适版本,请留言联系; 2.不用安装,直接将cppun

ColinOrg 681

linux unittest cpp,Linux下的CppUnit 的HelloWorld手记

操作系统系统:Ubuntu6,g++软件版本:cppunit-1.10.2.tar.gz(1)获得源码:到cppunit.sourceforge.net上下载源代码。将其复制到到linux下或者是直接使用wget下载到linux下。(2)解压缩:使用以下命令即可解压缩tar -zxvf cppunit-1.10.2.tar.gz(3)编译安装cd进cppunit-1.10.2目录下。./confi...

weixin_36174545的博客 175

CppUnit应用指南

<!-- @page {margin:2cm} @page:first {margin-right:3.17cm; margin-top:2.54cm; margin-bottom:2.54cm} h1 {margin-top:0.6cm; margin-bottom:0.58cm; line-height:200%; page-break-inside:av

回忆丶那些年的专栏 567

cppunit linux,Linux 下 CppUnit的安装与使用

OS:ubuntu9.04CppUnit:cppunit-1.12.11、下载、解压到http://sourceforge.net/projects/cppunit下载,然后复制cppunit-1.11.6.tar.gz到/usr/src;运行:tar -xf cppunit-1.10.2.tar.gz 解压缩;或者在WIN下直接解压2、安装进入cppunit-1.11.6目录下。依次运行下列命令...

weixin_39818662的博客 331

CppUnit使用和源码解析

前言   CppUnit是一个开源的单元测试框架,支持Linux和Windows操作系统,在linux上可以直接进行源码编译,得到动态库和静态库,直接链接就可以正常使用,在Windows上可以使用VC直接进行编译,非常便于调试。CppUnit的源码框架被运用到了Java和Python等语言中,使用非常广泛,熟悉了一种语言下的CppUnit使用方法,其他语言测试框架也不在话下,本文以cp...

dba175125的博客 583

cppunit使用详解

寄语:本人只做了windows的,这篇linux的没做,只使用了他的例子,不错 原文地址:http://blog.chinaunix.net/uid-20384806-id-1954332.html cppunit使用详解 第一步:如何安装 (我的运行环境: fc7 Linux, gcc4)     cppunit 的安装是相当标准的linux的安装过程   

piao 883

linux下CppUnit的应用

本文主要是论述CppUnit在C++项目中的应用,如何使用该单元测试,以及如何生成和查看测试报告和覆盖率报告。 [b]1.CppUnit 的安装。[/b] 本文以在Ubuntu下开发C++项目为例。 首先,读者需要选好速度较好的源去download一些应用程序,本文主要使用到gcc,cppunit,所以读者可以使用下面的命令去安装,使用[i]sudo -i[/i]切换...

一千零一夜的一千零一个梦 225

linux unittest cpp,CppUnit 测试方法说明

测试方法说明目录环境配置1.Windows环境配置解压缩cppunit-1.12.0.tar.gz。,在/src目录下,将CppUnitLibraries.dsw工程用VC打开。1.编译cppunit目录\src\cppunit\CppUnitLibraries.dsw中的cppunit_dll项目,release版生成cppunit_dll.lib和cppunit_dll.dll,debug版生...

weixin_35696012的博客 470
上一篇: Linux下的CppUnit 的HelloWorld手记
下一篇: 自动生成 Makefile 的全过程详解! automake/autoconf 入门
RunBoying
博客等级 码龄17年 41粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值