如何分文件编写Boost Test的test case
问题阐述
在使用Boost Test编写测试模块时,首先需要定义#define BOOST_TEST_MODULE example或者#define BOOST_AUTO_TEST_MAIN,否则测试模块初始化函数需要手动实现;
然后宏BOOST_AUTO_TEST_SUITE(test_suite)将创建一个名为test_suite的测试套件,并将其加入到测试模块中。宏BOOST_AUTO_TEST_CASE(test_case)将创建一个名为test_case的测试用例,并将其加入到测试套件test_suite中。
就像这样:
test_main.cpp
#define BOOST_TEST_MODULE example
#include<boost/test/included/unit_test.hpp>
BOOST_AUTO_TEST_SUITE(test_suite1)
BOOST_AUTO_TEST_CASE(test_case1)
{
BOOST_TEST_MESSAGE("running test_case1");
BOOST_TEST(true);
}
BOOST_AUTO_TEST_CASE(test_case2)
{
BOOST_TEST_MESSAGE("running test_case2");
BOOST_TEST(true);
}
BOOST_AUTO_TEST_SUITE_END()
关于测试模块常犯的一个错误是在不同的测试文件中定义不同的#define BOOST_TEST_MODULE example,最后将导致multiple definition of ‘init_unit_test_suite(int, char**)错误,原因是在一个测试程序中只允许存在一个定义一个测试模块。
那么很多归纳狂魔很不开心了,既然不能放在不同的测试文件里,我一个文件塞那么多测试代码不仅很难查找,而且不利于teamwork。就不能一个测试套件对应一个文件吗?
解决方案
方法当然有,利用#include的预编译功能就可以了。把所有测试套件写成.h头文件,在test_main.cpp中#include进来,就可以实现你的归纳梦了!这样多个文件也方便团队多人协同编写测试代码,岂不快哉?
test1.h
#ifndef BOOSTLEARN_TEST1_H
#define BOOSTLEARN_TEST1_H
#include"boost/test/unit_test.hpp"
BOOST_AUTO_TEST_SUITE( s_suit1 )
BOOST_AUTO_TEST_CASE( t_case1 )
{
BOOST_CHECK_EQUAL(1,1);
}
BOOST_AUTO_TEST_CASE( t_case2 )
{
BOOST_CHECK_EQUAL(3,1);
}
BOOST_AUTO_TEST_SUITE_END()
#endif//BOOSTLEARN_TEST1_H
test2.h
- #ifndef BOOSTLEARN_TEST2_H
#define BOOSTLEARN_TEST2_H
#include"boost/test/unit_test.hpp"
BOOST_AUTO_TEST_SUITE( s_suit2 )
BOOST_AUTO_TEST_CASE( t_case1 )
{
BOOST_CHECK_EQUAL(1,1);
}
BOOST_AUTO_TEST_CASE( t_case2 )
{
BOOST_CHECK_EQUAL(3,1);
}
BOOST_AUTO_TEST_SUITE_END()
#endif//BOOSTLEARN_TEST2_H
TestCommon.h
#ifndef BOOSTLEARN_TESTCOMMON_H
#define BOOSTLEARN_TESTCOMMON_H
#define BOOST_TEST_MODULE TestUnit
//请在下面添加每一个测试单元的头文件----
#include"test1.h"
#include"test2.h"
//...add here
- //---------------------------------
#endif//BOOSTLEARN_TESTCOMMON_H
- #include"TestCommon.h"
![](https://images2017.cnblogs.com/blog/881259/201801/881259-20180121192014240-1818536097.png)