boost单元测试框架
2015-04-23 18:10 youxin 阅读(1382) 评论(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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2014-04-23 linux eclipse c++配置
2012-04-23 JFrame setDefaultLookAndFeelDecorated(true)