快速业务通道

Boost Test学习总结(C++)

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29

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类似,用来检查两个参数是否相等。

3.单参数测试用例

有时候需要对一个测试用例使用不同的参数运行测试,前面提到的BOOST_AUTO_TEST_CASE不能满足需求,此时需要对测试用例进行手动注册(来自Boost文档):

单参数测试用例

#include <boost/test/included/unit_test.hpp>

#include <boost/test/parameterized_test.hpp>

using namespace boost::unit_test;



void free_test_function( int i )

{

BOOST_CHECK( i < 4 /* test assertion */ );

}



te

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号