/************************************************************************/
/*
测试夹具: 测试安装和测试清理好比c++中的构造函数和析构函数,“测试夹具”实现了自动的测试安装和测试清理。基本形式为:
struct test_fixture_name // 测试夹具类, 通常是struct, 将被UTF继承
{
test_fixture_name(){} // 测试安装工作
~test_fixture_name(){} // 测试清理工作
};
测试夹具类需要使用以下两个宏指定测试用例和测试套件
#define BOOST_FIXTURE_TEST_SUITE(suite_name, F)
#define BOOST_FIXTURE_TEST_CASE(test_name, F)
*/
/************************************************************************/
#include "stdafx.h"
#include <iostream>
//#include <boost/core/lightweight_test.hpp>
using namespace std;
#define BOOST_TEST_MODULE test_module // 定义boost测试模块,宏后面的 test_xxxx不重复就行(这行语句必须存在,可用于标记不同模块的测试)
#include <boost/test/unit_test.hpp> // 引用boost单元测试头文件
#include <boost/smart_ptr.hpp>
#include <boost/assign.hpp>
using namespace boost::assign;
//using namespace boost::unit_test;
struct global_fixture // 全局测试夹具类
{
global_fixture(){ cout << ("global setup\n"); }
~global_fixture(){ cout << ("global teardown\n"); }
};
// 该宏定义的夹具类被应用于整个测试用例的所有测试套件, 包括主测试套件
BOOST_GLOBAL_FIXTURE(global_fixture);
struct assign_fixture // 测试套件夹具类
{
assign_fixture(){ cout << ("suit setup\n"); }
~assign_fixture(){ cout << ("suit teardown\n"); }
vector<int> v; // 所有测试用例都可以用的成员变量
};
// 定义测试套件级别的夹具
BOOST_FIXTURE_TEST_SUITE(s_assign, assign_fixture);
BOOST_AUTO_TEST_CASE(t_assign1) // 测试用例1, 测试+=操作符
{
v += 1, 2, 3, 4;
BOOST_CHECK_EQUAL(v.size(), 4);
BOOST_CHECK_EQUAL(v[2], 3);
}
BOOST_AUTO_TEST_CASE(t_assign2) // 测试用例2, 测试push_back函数
{
push_back(v)(10)(20)(30);
BOOST_CHECK_EQUAL(v.empty(), false);
BOOST_CHECK_LT(v[0], v[1]);
}
/*
以上代码打印如下信息:
global setup
Running 2 test cases...
suit setup
suit teardown
suit setup
suit teardown
*** No errors detected
global teardown
*/
BOOST_AUTO_TEST_SUITE_END() // 测试套件结束