Boost Test学习总结(C++)

1.常用的C++单元测试框架

测试驱动开发(TDD)已经是一种非常流行的开发方式了,在Java和.Net中都提供了非常好的单元测试框架,最近研究C++下面的单元测试,发现其实在C++中还是有很多选择:

CPPUnit:著名的XUnit系列产品之一,熟悉JUnit、NUnit的开发人员可以很快上手。

CXXTest:需要进行预处理,需要安装Perl或Python。

Boost Test:功能强大,提供了自动注册和手动注册两种方式,更重要的是来自千锤百炼的Boost库。

Google Test:Google在去年开源的测试框架,据说其内部上千个项目均采用该框架进行单元测试。

2.Boost Test起步

先来看一个简单的Boost Test示例(来自Boost文档):

测试初步

1#define BOOST_TEST_MODULE example
2
3#include <boost/test/unit_test.hpp>
4
5
6
7int add(int i, int j);
8
9
10
11BOOST_AUTO_TEST_SUITE(minimal_test)
12
13
14
15BOOST_AUTO_TEST_CASE(my_test)
16
17{
18
19    BOOST_CHECK(add(2, 2) == 5);
20
21    BOOST_REQUIRE(add(2, 2) == 4);
22
23    if(add(2, 2) != 4)
24
25        BOOST_ERROR("oops!");
26
27    if(add(2, 2) != 4)
28
29        BOOST_FAIL("oops!");
30
31    if(add(2, 2) != 4)
32
33        throw "oops!";
34
35    BOOST_CHECK_MESSAGE(add(2, 2) == 4, "add(..) result: " << add(2, 2));
36
37    BOOST_CHECK_EQUAL(add(2, 2), 4);
38
39}
40
41
42
43BOOST_AUTO_TEST_SUITE_END()
44
45

首先,需要定义#define BOOST_TEST_MODULE example或者#define BOOST_AUTO_TEST_MAIN,否则测试模块初始化函数需要手动实现;然后宏“BOOST_AUTO_TEST_SUITE(minimal_test)”将创建一个名为minimal_test的测试套件,并将其加入到测试模块中。宏“BOOST_AUTO_TEST_CASE(my_test)”将创建一个名为“my_test”的测试用例,并将其加入到测试套件minimal_test中。

关于测试模块常犯的一个错误是在不同的测试文件中定义不同的“#define BOOST_TEST_MODULE example”,最后将导致“multiple definition of ‘init_unit_test_suite(int, char**)’”错误,原因是在一个测试程序中只允许存在一个定义一个测试模块。测试模块中存在一个主测试套件,所有未明确包含到测试套件中的测试用例将被包含到主测试套件中。

下面是具体的测试过程了,在程序中展示了七种不同的方式来对函数add进行测试:

BOOST_CHECK:这种方法将检查到的错误保存起来,测试结束时由测试框架自动显示;

BOOST_REQUIRE:同样是检查错误,与BOOST_CHECK不同之处在于如果发生错误时将抛出一个异常,因此后续的测试将不会继续进行;

BOOST_ERROR:可以用来对错误进行独立描述,测试结束时由测试框架自动显示;

BOOST_FAIL:同样可以用来对错误进行独立描述,调用时将抛出一个异常;

抛出异常方式:测试框架将捕获该异常并打印出错误信息;

BOOST_CHECK_MESSAGE:与BOOST_CHECK类似,可以在第二个参数中加入错误描述信息;

BOOST_CHECK_EQUAL:与BOOST_CHECKL类似,用来检查两个参数是否相等。

时间: 2024-08-02 17:38:28

Boost Test学习总结(C++)的相关文章

boost::bind 学习

 最近学习了太多与MacOS与Iphone相关的东西,因为不会有太多人有兴趣,学习的平台又是MacOS,不太喜欢MacOS下的输入法,所以写下来的东西少了很多.    等我学习的东西慢慢的与平台无关的时候,可能可以写下来的东西又会慢慢多起来吧.....不过我想早一批订阅我博客的人应该已经不会再看了,因为已经很少会有程序语言或者C++之类的信息,相关的东西应该都是关于计算机图形,游戏的.或者,早一批订阅我博客的人现在也已经毕业,工作了呢?    对了,这次的主题是boost:bind.在历经了bo

boost库学习随记六:使用同步定时器、异步定时器、bind、成员函数回调处理、多线程的同步处理示例等

一.使用同步定时器 这个示例程序通过展示如何在一个定时器执行一个阻塞等待.       [cpp] view plaincopy   //makefile   #----------------------------------------------------------   #makefile helloworld测试用例   #   #   #   #   #-----------------------------------------------------------   gg

Boost Thread学习笔记二

除了thread,boost::thread另一个重要组成部分是mutex,以及工作在mutex上的boost::mutex::scoped_lock.condition和barrier,这些都是为实现线程同步提供的. mutexboost提供的mutex有6种:boost::mutexboost::try_mutexboost::timed_mutexboost::recursive_mutexboost::recursive_try_mutexboost::recursive_timed_m

Boost Thread学习笔记三

下面先对condition_impl进行简要分析.condition_impl在其构造函数中会创建两个Semaphore(信号量):m_gate.m_queue,及一个Mutex(互斥体,跟boost::mutex类似,但boost::mutex是基于CriticalSection<临界区>的):m_mutex,其中:m_queue相当于当前所有等待线程的等待队列,构造函数中调用CreateSemaphore来创建Semaphore时,lMaximumCount参数被指定为(std::nume

boost uuid 学习笔记

#include <vector>#include <iostream>#include <boost/uuid/uuid.hpp>#include <boost/uuid/uuid_generators.hpp>#include <boost/uuid/uuid_io.hpp>using namespace boost::uuids;using namespace std;int main(){ //----------------------

Boost Thread学习笔记五

多线程编程中还有一个重要的概念:Thread Local Store(TLS,线程局部存储),在boost中,TLS也被称作TSS,Thread Specific Storage.boost::thread库为我们提供了一个接口简单的TLS的面向对象的封装,以下是tss类的接口定义: class tss{public:    tss(boost::function1<void, void*>* pcleanup);    void* get() const;    void set(void*

Boost Thread学习笔记四

barrierbarrier类的接口定义如下:  1 class barrier : private boost::noncopyable   // Exposition only 2 { 3 public: 4   // construct/copy/destruct 5   barrier(size_t n); 6   ~barrier(); 7  8   // waiting 9   bool wait();10 }; barrier类为我们提供了这样一种控制线程同步的机制:前n - 1次

HTTP服务端JSON服务端

HTTP服务端JSON服务端 最后更新日期:  2014-5-18 Author: Kagula 阅读前提: CMake工具的基本使用 内容简介:    CPPCMS是个开源Web开发框架,通过它可以很容易实现HTTP服务和JSON服务,这里介绍CPPCMS开发环境的搭建.写一个CPPCMS测试程序,它建立HTTP服务,向浏览器返回Hello,World页面.CPPCMS依赖的一些第三方库,其它地方已经介绍怎么Build,所以这里不重复了. 环境:Windows8.1 64bit.Visual

Boost学习之正则表达式--regex

来源:http://blog.chinaunix.net/uid-21222282-id-1829265.html 来源:http://www.cnblogs.com/undermoon/archive/2009/11/30/1613508.html 来源:http://blog.csdn.net/guyulongcs/article/details/7838753 来源:http://blog.csdn.net/leonardwang/article/details/6035171 boost