最近在用Boost库中的Test模块编写测试代码,感觉很不错。事先声明,这篇文章不是教你如何使用Boost Test模块的,关于入门材料我建议大家还是直接参考Boost官方文档http://www.boost.org/doc/libs/1_59_0/libs/test/doc/html/index.html,英语不好的可以找找有没有中文翻译,不过翻译质量不敢保证。当然既然是学编程的,英语不好就得勤学苦练自我提升,否则有太多优秀的材料你无法阅读!这里给大家一句忠告,不要试图尝试通过CSDN,cnblogs之类的中文博客来碎片化地学习某项新技术。除非博主照搬全书,大多数博主只是在写自己的学习心得,不成系统,难免片面。更何况优秀文章少之又少,所以还是去阅读代码原作者的文档吧。
问题阐述
在使用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进来,就可以实现你的归纳梦了!这样多个文件也方便团队多人协同编写测试代码,岂不快哉?
test_suite1.h
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()
test_suite2.h
BOOST_AUTO_TEST_SUITE(test_suite2)
BOOST_AUTO_TEST_CASE(test_case3)
{
BOOST_TEST_MESSAGE("running test_case3");
BOOST_TEST(true);
}
BOOST_AUTO_TEST_CASE(test_case4)
{
BOOST_TEST_MESSAGE("running test_case4");
BOOST_TEST(true);
}
BOOST_AUTO_TEST_SUITE_END()
test_main.cpp
#define BOOST_TEST_MODULE example
#include <boost/test/included/unit_test.hpp>
#include "test_suite1.h"
#include "test_suite2.h"

1309

被折叠的 条评论
为什么被折叠?



