代码改变世界

boost单元测试框架

2015-04-23 18:10  youxin  阅读(1379)  评论(0编辑  收藏  举报

头文件:

#include <boost/test/unit_test.hpp>

编译加:-lboost_unit_test_framework

单元测试:

 需要定义BOOST_TEST_MAIN做为主测试入口 

http://www.ibm.com/developerworks/cn/aix/library/au-ctools1_boost/

 

 

使用注意:

#define BOOST_TEST_MAIN  //一定要有,且要放在unit_tset.hpp的前面,否则:(unit_test_main.obj) : error LNK2019: 无法解析的外部符号 "class boost::unit_test::test_suite * __
 
#include <boost/test/unit_test.hpp>


Boost库单元测试使用配置
为了使用方便,一般编译为静态库。以便于最终发布程序,不需要打包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。