了解 Boost 单元测试框架
作者:网络转载 发布时间:[ 2013/9/3 10:07:46 ] 推荐标签:
清单 22. 同时包含装备和非装备测试的 Boost 测试套件
#define BOOST_TEST_MODULE example
#include <boost/test/included/unit_test.hpp>
#include <iostream>
struct F {
F() : i( 0 ) { std::cout << "setup" << std::endl; }
~F() { std::cout << "teardown" << std::endl; }
int i;
};
BOOST_AUTO_TEST_SUITE( test )
BOOST_FIXTURE_TEST_CASE( test_case1, F )
{
BOOST_CHECK( i == 1 );
++i;
}
BOOST_AUTO_TEST_CASE( test_case2 )
{
BOOST_REQUIRE( 2 > 1 );
}
BOOST_AUTO_TEST_CASE( test_case3 )
{
int i = 1;
BOOST_CHECK_EQUAL( i, 1 );
++i;
}
BOOST_AUTO_TEST_SUITE_END()
在 清单 22 中,在一个测试用例上定义和使用了装备。Boost 还允许用户通过 BOOST_GLOBAL_FIXTURE (<Fixture Name>) 宏定义和使用全局装备。可以定义任意数量的全局装备,因此可以把初始化代码分割为多个部分。清单 23 使用一个全局装备。
清单 23. 使用全局装备进行回归测试初始化
#define BOOST_TEST_MODULE example
#include <boost/test/included/unit_test.hpp>
#include <iostream>
struct F {
F() { std::cout << "setup" << std::endl; }
~F() { std::cout << "teardown" << std::endl; }
};
BOOST_AUTO_TEST_SUITE( test )
BOOST_GLOBAL_FIXTURE( F );
BOOST_AUTO_TEST_CASE( test_case1 )
{
BOOST_CHECK( true );
}
BOOST_AUTO_TEST_SUITE_END()
对于多个装备,它们的设置和清除按照声明的次序执行。在 清单 24 中,先调用 F 的构造函数,然后是 F2 的;对于销毁函数也是这样。
清单 24. 在回归测试中使用多个全局装备
#define BOOST_TEST_MODULE example
#include <boost/test/included/unit_test.hpp>
#include <iostream>
struct F {
F() { std::cout << "setup" << std::endl; }
~F() { std::cout << "teardown" << std::endl; }
};
struct F2 {
F2() { std::cout << "setup 2" << std::endl; }
~F2() { std::cout << "teardown 2" << std::endl; }
};
BOOST_AUTO_TEST_SUITE( test )
BOOST_GLOBAL_FIXTURE( F );
BOOST_GLOBAL_FIXTURE( F2 );
BOOST_AUTO_TEST_CASE( test_case1 )
{
BOOST_CHECK( true );
}
BOOST_AUTO_TEST_SUITE_END()
注意,不能将全局装备作为对象用在单个测试中。也不能在测试中直接访问它们的公共/受保护的非静态方法或变量。
结束语
本文介绍了强大的开放源码回归测试框架之一:Boost。讨论了基本的 Boost 检查、模式匹配、浮点比较、定制检查、测试套件的组织(包括手工和自动)和装备。请通过 Boost 文档了解更多信息。本系列的后续文章将介绍 cppUnit 等开放源码回归测试框架。

sales@spasvo.com