C++单元测试之四--利用cppunit运行测试用例

简介: cppunit是一个很好的针对于C++/C的单元测试框架,它源自于junit。利用cppunit我们可以很好的管理运行测试用例。cppunit是开源的,遵循LGPLv2许可证。你可以从http://sourceforge.net/projects/cppunit/下载到最新版本。
cppunit是一个很好的针对于C++/C的单元测试框架,它源自于junit。利用cppunit我们可以很好的管理运行测试用例。
cppunit是开源的,遵循LGPLv2许可证。
你可以从http://sourceforge.net/projects/cppunit/下载到最新版本。
下载解压后依次运行:
./configure
./make
./make install
cppunit就会被自动部署到你的机器上,其中头文件位于/usr/include/cppunit目录下,库文件位于/usr/local/lib中。你也可以直接把附件中编译好的cppunit解压拷贝到对应目录下。

设置好cppunit环境后,下面就开始修改代码。
首先修改Main.cpp如下:

点击(此处)折叠或打开

 #include stdio.h>
  1. #include stdlib.h>
  2. #include cppunit/extensions/TestFactoryRegistry.h>
  3. #include cppunit/ui/text/TestRunner.h>

  4. int main(int argc, char *argv[])
  5. {
  6.         CppUnit::TextUi::TestRunner runner;
  7.         CppUnit::TestFactoryRegistry &registry = CppUnit::TestFactoryRegistry::getRegistry();
  8.         runner.addTest(registry.makeTest());

  9.         runner.run();


  10.     return 0;
  11. }
其次添加TestA.cpp/.h来测试A.cpp:

点击(此处)折叠或打开

  1. //TestA.h
  2. #include cppunit/extensions/HelperMacros.h>

  3. class TestA: public CppUnit::TestFixture{
  4.         CPPUNIT_TEST_SUITE(TestA);
  5.         CPPUNIT_TEST(testSum);
  6.         CPPUNIT_TEST(testMultiply);
  7.         CPPUNIT_TEST_SUITE_END();
  8. public:
  9.         void testSum();
  10.         void testMultiply();
  11. };


点击(此处)折叠或打开

  1. //TestA.cpp
  2. #include "A.h"
  3. #include "TestA.h"
  4. CPPUNIT_TEST_SUITE_REGISTRATION(TestA);
  5. void TestA::testSum()
  6. {
  7.         A a;
  8.         CPPUNIT_ASSERT(11 == a.Sum(5,6));

  9. }

  10. void TestA::testMultiply()
  11. {
  12.         A a;
  13.         CPPUNIT_ASSERT(30 == a.Multiply(5,6));
  14. }

cppunit使用断言(ASSERT)来判断测试结果是否正确。
最后修改Makefile:


点击(此处)折叠或打开

  1. OBJS= Main.o A.o TestA.o

  2. UTest.out: $(OBJS)
  3.         g++ -o UTest.out $(OBJS) -ldl -lgcov -lcppunit


  4. CURDIR=$(shell pwd)

  5. $(OBJS): %.o: %.cpp
  6.         g++ -I$(CURDIR) -c -g -fprofile-arcs -ftest-coverage $ -o $@

  7. #unit test and code coverage check
  8. UT:UTest.out
  9.         valgrind --tool=memcheck --leak-check=full ./UTest.out
  10.         ./gcov_checker 90 --objects $(OBJS)
  11. #gcov -o A.o A.cpp

  12. .PHONY: clean
  13. clean:
  14.         rm -f *.o *.gcno *.gcda *.gcov UTest.out

编译运行的结果是:

点击(此处)折叠或打开

  1. [root@tivu25 utcov_cppunit]# make clean;make UT
  2. rm -f *.o *.gcno *.gcda *.gcov UTest.out
    g++  -I/home/haoqf/src/UTest/utcov_cppunit -c -g -fprofile-arcs -ftest-coverage Main.cpp -o Main.o
    g++  -I/home/haoqf/src/UTest/utcov_cppunit -c -g -fprofile-arcs -ftest-coverage A.cpp -o A.o
    g++  -I/home/haoqf/src/UTest/utcov_cppunit -c -g -fprofile-arcs -ftest-coverage TestA.cpp -o TestA.o
    g++ -o UTest.out Main.o A.o TestA.o  -ldl -lgcov -lcppunit
    valgrind --tool=memcheck --leak-check=full ./UTest.out
    ==31409== Memcheck, a memory error detector.
    ==31409== Copyright (C) 2002-2006, and GNU GPL'd, by Julian Seward et al.
    ==31409== Using LibVEX rev 1658, a library for dynamic binary translation.
    ==31409== Copyright (C) 2004-2006, and GNU GPL'd, by OpenWorks LLP.
    ==31409== Using valgrind-3.2.1, a dynamic binary instrumentation framework.
    ==31409== Copyright (C) 2000-2006, and GNU GPL'd, by Julian Seward et al.
    ==31409== For more details, rerun with: -v
    ==31409==
    ..


    OK (2 tests)


    ==31409==
    ==31409== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 19 from 1)
    ==31409== malloc/free: in use at exit: 0 bytes in 0 blocks.
    ==31409== malloc/free: 82 allocs, 82 frees, 9,807 bytes allocated.
    ==31409== For counts of detected errors, rerun with: -v
    ==31409== All heap blocks were freed -- no leaks are possible.
    ./gcov_checker 90 --objects Main.o A.o TestA.o
    Code coverage:
    Main.cpp:100.0%
    A.cpp:100.0%
    TestA.cpp:100.0%
    See *.gcov files for details.

zip.gif cppunit_compiled.zip  
《返璞归真--UNIX技术内幕》在全国各大书店及网城均有销售:
京东
亚马逊                          China pub
上学吧                          1号店




目录
相关文章
|
1天前
|
JSON 开发工具 C语言
编程入门(五)【Visual Studio Code安装与C/C++语言运行】
编程入门(五)【Visual Studio Code安装与C/C++语言运行】
|
7天前
|
Web App开发 测试技术 数据安全/隐私保护
软件测试: 测试用例
软件测试: 测试用例
|
9天前
|
安全 数据管理 测试技术
网络安全与信息安全:防范漏洞、加强加密与提升安全意识深入探索自动化测试框架的设计原则与实践应用化测试解决方案。文章不仅涵盖了框架选择的标准,还详细阐述了如何根据项目需求定制测试流程,以及如何利用持续集成工具实现测试的自动触发和结果反馈。最后,文中还将讨论测试数据管理、测试用例优化及团队协作等关键问题,为读者提供全面的自动化测试框架设计与实施指南。
【5月更文挑战第27天】 在数字化时代,网络安全与信息安全已成为维护国家安全、企业利益和个人隐私的重要环节。本文旨在分享关于网络安全漏洞的识别与防范、加密技术的应用以及提升安全意识的重要性。通过对这些方面的深入探讨,我们希望能为读者提供一些实用的建议和策略,以应对日益严峻的网络安全挑战。 【5月更文挑战第27天】 在软件开发周期中,自动化测试作为保障软件质量的关键步骤,其重要性日益凸显。本文旨在剖析自动化测试框架设计的核心原则,并结合具体案例探讨其在实际应用中的执行策略。通过对比分析不同测试框架的优缺点,我们提出一套高效、可扩展且易于维护的自动
|
20天前
|
测试技术
如何管理测试用例?测试用例有什么管理工具?YesDev
该文档介绍了测试用例和测试用例库的管理。测试用例是描述软件测试方案的详细步骤,包括测试目标、环境、输入、步骤和预期结果。测试用例库用于组织和管理这些用例,强调简洁性、完整性和可维护性。管理者可以创建、删除、重命名用例库,搜索和管理用例,以及通过层级目录结构来组织用例。此外,还支持通过Excel导入和导出测试用例,以及使用脑图查看用例关系。后台管理允许配置全局别名,如用例状态、优先级和执行结果。
|
21天前
|
前端开发 测试技术 数据安全/隐私保护
软件测试 —— 测试用例设计报告
软件测试 —— 测试用例设计报告
|
21天前
|
监控 数据可视化 IDE
python自动化测试实战 —— 单元测试框架
python自动化测试实战 —— 单元测试框架
|
21天前
|
存储 自然语言处理 测试技术
测试答疑助手:从需求文档到设计文档、测试用例的完整测试过程
本文介绍了如何使用LangChain构建一个基于本地文档和数据的测试答疑助手。该助手能回答自然语言问题,涉及数据统计、查找和组合。实践过程包括:设置API Token,导入LangChain相关库,使用MarkdownHeaderTextSplitter处理不同文档,将文本转换为向量并存储在Chroma向量数据库中。之后,通过查询数据库找到最相关的文本片段,结合大模型(如ChatOpenAI)生成回答。示例展示了询问用户注册用例中特定数据的统计情况,得到了包含表格的详细回答。
17 0
|
21天前
|
测试技术
测试基础 Junit单元测试框架
测试基础 Junit单元测试框架
18 2
测试基础 Junit单元测试框架
|
21天前
|
机器学习/深度学习 人工智能 算法
深入分析自动化测试中AI驱动的测试用例生成
【5月更文挑战第4天】随着人工智能(AI)技术的飞速发展,其在软件测试领域的应用也日益广泛。特别是在自动化测试过程中,AI技术能够显著提高测试用例的生成效率和质量。本文将探讨AI在自动化测试用例生成中的应用原理、优势以及面临的挑战,并展示通过AI技术优化测试流程的实际案例。
85 8
|
21天前
|
安全 测试技术 Go
Golang深入浅出之-Go语言单元测试与基准测试:testing包详解
【4月更文挑战第27天】Go语言的`testing`包是单元测试和基准测试的核心,简化了测试流程并鼓励编写高质量测试代码。本文介绍了测试文件命名规范、常用断言方法,以及如何进行基准测试。同时,讨论了测试中常见的问题,如状态干扰、并发同步、依赖外部服务和测试覆盖率低,并提出了相应的避免策略,包括使用`t.Cleanup`、`t.Parallel()`、模拟对象和检查覆盖率。良好的测试实践能提升代码质量和项目稳定性。
18 1