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

最近在用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"

运行结果

测试截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值