您的位置:首页 > 其它

如何分文件编写Boost Test的test case

2015-11-30 19:12 316 查看
最近在用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"


运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  boost 测试