现在的位置: 首页 > 综合 > 正文

Boost库单元测试使用配置

2013年09月23日 ⁄ 综合 ⁄ 共 4302字 ⁄ 字号 评论关闭

Boost库单元测试使用配置

1 Boost库简介
Boost官网:http://www.boost.org/。
中文简介见百度百科:http://baike.baidu.com/view/663725.htm。
Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。
Boost中比较有名气的几个库:

  • Regex 正则表达式库。
  • Pool 内存池管理。
  • smart_ptr 5个智能指针,学习智能指针必读。

Boost学习书籍《Boost程序库完全开发指南》。

2 下载源文件
版本:Boost 1.48.0
地址:http://sourceforge.net/projects/boost/files/boost/1.48.0/

3 Bjam工具生成
参考:http://blog.csdn.net/great3779/article/details/6977922/
编译器:vs2005。

解压源文件到D:\boost_1_48_0
运行D:\boost_1_48_0\bootstrap.bat,生成bjam.exe。

4 编译Boost.test模块
Boost.test为单元测试模块,其他模块编译方式相同。
Test: Support for simple program testing, full unit testing, and for program execution monitoring, from Gennadiy Rozental.

静态库生成命令:bjam stage --toolset=msvc-8.0 --with-test link=static debug release
动态库生成命令:bjam stage --toolset=msvc-8.0 --with-test link=shared debug release

默认生成位置:
include paths:D:/boost_1_48_0
library paths:D:\boost_1_48_0\stage\lib

为了使用方便,一般编译为静态库。以便于最终发布程序,不需要打包Boost的Dll。且根据实际编译情况,发现静态库编译速度较快。
生成文件描述。

文件名 含义 编译选项
libboost_unit_test_framework-vc80-mt-gd-1_48.lib 静态库,多线程,调试版本 
使用静态调试版本C运行时库(LIBCMTD.LIB和LIBCPMTD.LIB)
/MTd
libboost_unit_test_framework-vc80-mt-1_48.lib 静态库,多线程 
使用静态版本C运行时库(LIBCMT.LIB和LIBCPMT.LIB)
/MT
boost_unit_test_framework-vc80-mt-gd-1_48.lib 静态库,多线程,调试版本 
使用动态调试版本C运行时库(MSVCRTD.LIB和MSVCPRTD.LIB)
/MDd
boost_unit_test_framework-vc80-mt-1_48.lib 静态库,多线程 
使用动态版本C运行时库(MSVCRT.LIB和MSVCPRT.LIB)
/MD

5 Boost.test调用示例
Boost库的使用学习,见自带index.htm,本例路径为D:\boost_1_48_0\index.htm。
参考:http://www.cnblogs.com/zhihuichien/archive/2010/09/01/1815185.html
参考:http://www.oschina.net/code/snippet_126720_4924

关于单元测试的总结。

  • 需求确定后,先写单元测试代码,测试代码随需求而变。
  • 测试代码着眼于被测代码应该如何运行,而不是复现被测代码是如何实现的。
  • 能否写好单元测试代码表示对需求的理解是否到位。
  • 如果每个模块都经过单元测试,那么集成后出现的问题就可以确认为是模块间传递消息时出现的问题,从而将bug隔离出来,这是单元测试的真正亮点。

创建示例工程。

  • vs2005创建win32控制台工程,例工程名为BoostTest。
  • 配置头文件路径。

ConfigurationProperties->C/C++->General->Additional Include Directories路径设置。

对应本例,设置为D:\boost_1_48_0。

  •  Lib库路径配置

Configuration Properties->Linker->General->AdditionalLibrary Directories路径设置。

对应本例,设置为D:\boost_1_48_0\stage\lib。

  • 依赖库设置

设置项ConfigurationProperties->Linker->Input->Additional Dependencies。

Debug为:libboost_unit_test_framework-vc80-mt-gd-1_48.lib。

Release为:libboost_unit_test_framework-vc80-mt-1_48.lib。

BoostTest.cpp源码如下:
#define BOOST_TEST_MAIN
#include <boost/test/included/unit_test.hpp>
#include <boost/assign.hpp>
#include <iostream>
using namespace std;

struct global_fixture
{
    global_fixture() { cout << ("global setup\n") << endl; }
    ~global_fixture() { cout << ("global teardown\n") << endl; }
};

BOOST_GLOBAL_FIXTURE(global_fixture);

struct assign_fixture
{
    assign_fixture() { cout << ("suit setup\n") << endl; }
    ~assign_fixture() {cout << ("suit teardown\n") << endl; }
    vector<int> v;
}; 

BOOST_FIXTURE_TEST_SUITE(s_assign, assign_fixture)

BOOST_AUTO_TEST_CASE(t_assign_1)
{
    using namespace boost::assign;

    v += 1,2,3,4;
    BOOST_CHECK_EQUAL(v.size(), 4);
    BOOST_CHECK_EQUAL(v[2], 4);
}

BOOST_AUTO_TEST_SUITE_END()

本例是个简单的单元测试。
用来检测vector容器,条目数是否为4,以及第三个值是否为4。

运行程序,输出信息为:error in "t_assign_1": check v[2] == 4 failed [3 != 4]。
检测出第三个值不为4。

6 Bjam工具实用命令
参考:http://hi.baidu.com/smart_bee/blog/item/360f23d1c3a3fc87a0ec9cb6.html
参考:http://hi.baidu.com/gclsoft/blog/item/293af0833de60ca26d8119a6.html

Bjame命令 含义
stage/install stage表示只生成库(dll和lib),install还会生成包含头文 件的include目录。
本人推荐使用stage,因为install生成的这个include目录实际就是boost安装包解压缩后的boost目录 (E:\SDK\boost_1_39_0\boost,只比include目录多几个非hpp文件,都很小),
所以可以直接使用,而且不同的IDE都可以使用同一套头文件,这样既节省编译时间,也节省硬盘空间。
toolset 指定编译器,可选的如borland、gcc、msvc(VC6)、msvc- 8.0(VS2005)、msvc- 9.0(VS2008)等。
--with-<library> 只编译指定的库,如输入--with-regex就只编译regex库了。
--stagedir/prefix=<stagedir>/<prefixdir> stage时使用stagedir,install时使用prefix, 表示编译生成文件的路径。
推荐给不同的IDE指定不同的目录,如VS2008对应的是E:\SDK\boost_1_39_0\bin\vc9,
VC6对 应的是E:\SDK\boost_1_39_0\bin\vc6,否则都生成到一个目录下面,难以管理。
如果使用了install参数,那么还将生成头文 件目录,
vc9对应的就是E:\SDK\boost_1_39_0\bin\vc9\include\boost-1_39\boost,
vc6类似(光 这路径都这样累赘,还是使用stage好)。
--build-dir=<builddir> 编译生成的中间文件的路径。
编译的临时文件会放在builddir里(这样比较好管理,编译完就可以把它删除了)。
默认就在根目录(E:\SDK \boost_1_39_0)下,目录名为bin.v2,
等编译完成后可将这个目录全部删除(没用了),所以不需要去设置。
link=static|shared 生成动态链接库/静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用 static方式。
一般boost库可能都是以static方式编译,因为最终发布程序带着boost的dll感觉会比较累赘。
runtime-link=static|shared 动态/静态链接C/C++运行时库。同样有shared和static两种方 式,
这样runtime-link和link一共可以产生4种组合方式,
各人可以根据自己的需要选择编译。一般link只选static的话,
只需要编译 2种组合即可,即link=static runtime-link=shared和link=static runtime-link=static。
threading=single|multi 单/多线程编译。
一般都写多线程程序,当然要指定multi方式了;
如果需要编写单线 程程序,那么还需要编译单线程库,可以使用single方式。
debug/release 编译debug/release版本。一般都是程序的debug版本对应库的 debug版本,所以两个都编译。

抱歉!评论已关闭.