据说相比之cppunit等其它的测试工具更好用,反正当初cppunit没能够在实际工作中派上用场,今天突然看到boost test库,而且是boost库内置的,研究一下。
test库将测试程序定义为一个测试模块,由测试安装,测试主体,测试清理和测试运行器四个部分组成。测试主体是测试模块的实际运行部分,由测试用例和测试套件组织成测试树的形式。
刚开始测试时,老是会报如下的链接错误:
libboost_unit_test_framework-vc90-mt-gd-1_47.lib(unit_test_main.obj) : error LNK2019: 无法解析的外部符号 "class boost::unit_test::test_suite * __cdecl init_unit_test_suite(int,char * * const)" (?init_unit_test_suite@@YAPAVtest_suite@unit_test@boost@@HQAPAD@Z),该符号在函数 _main 中被引用
1>E:\study\test_boost_suit\Debug\test_boost_suit.exe : fatal error LNK1120: 1 个无法解析的外部命令
怀疑是系统环境没设对,打开其它几个使用boost库的程序,编译,运行正常。再到boost目录中查找对应的lib,也能找到,网上再看别人类似的错误,然后将#define BOOST_TEST_MODULE maintest放在#include <boost/test/unit_test.hpp>之前,如下代码排布:
// test_boost_suit.cpp : 定义控制台应用程序的入口点。
//
#define BOOST_TEST_MODULE maintest
#include <boost/test/unit_test.hpp>
编译通过。
这次测试验证了如何用boost test完成一个测试套件的问题,由于源代码少,贴出来。
// test_boost_suit.cpp : 定义控制台应用程序的入口点。
//
#define BOOST_TEST_MODULE maintest
#include <boost/test/unit_test.hpp>
#include <boost/smart_ptr.hpp>
using namespace boost;
using namespace boost::unit_test;
BOOST_AUTO_TEST_SUITE(s_smart_ptr)
BOOST_AUTO_TEST_CASE(t_scoped_ptr)
{
scoped_ptr<int> p(new int(874));
BOOST_CHECK(p);
BOOST_CHECK_EQUAL(*p, 875);
p.reset();
BOOST_CHECK(p == 0);
}
BOOST_AUTO_TEST_CASE(t_shared_ptr)
{
shared_ptr<int> p(new int(100));
BOOST_CHECK(p);
BOOST_CHECK_EQUAL(*p, 100);
BOOST_CHECK_EQUAL(p.use_count(), 1);
shared_ptr<int> p2 = p;
BOOST_CHECK_EQUAL(p, p2);
BOOST_CHECK_EQUAL(p2.use_count(), 2);
*p2 = 255;
BOOST_CHECK_EQUAL(*p, 255);
BOOST_CHECK_GT(*p, 200);
}
BOOST_AUTO_TEST_SUITE_END()