如何在所有测试用例BOOST c ++之后运行一个函数

时间:2016-03-20 17:09:50

标签: c++ unit-testing boost

我有问题,我在思考;如果有任何宏,C ++ BOOST库中的功能,它将在 ALL 测试用例之后运行一次函数。

我想运行一个将创建一个json文件的函数没有。执行的测试,没有。通过测试,没有。所有测试。所以我有这个问题,因为我必须使用以特定方式构建的文件:

F1()
F2()
F3()
BOOST_AUTO_TEST_CASE(F1){}
BOOST_AUTO_TEST_CASE(F2){}
BOOST_AUTO_TEST_CASE(F3){}

所以我不能创建main()函数,它会为我做这个,因为我得到一个错误,在/boost/test/unit_test.hpp中有一个先前的声明。

提前谢谢你。问候。

2 个答案:

答案 0 :(得分:2)

至少有两种方法可以解决这个问题。

第一种方法是使用fixture,或者更具体地说是global fixture

#define BOOST_TEST_MODULE example
#include <boost/test/included/unit_test.hpp>

struct Fixture {
  Fixture()   { /* Run on startup */ }
  ~Fixture()  { /* Run on tear down */ }
};

BOOST_GLOBAL_FIXTURE(Fixture);

BOOST_AUTO_TEST_CASE(test_case)
// ... and so on

另一个选项是使用库中为overriding the entry point提供的功能,以便您可以在尝试时使用自己的main()

答案 1 :(得分:0)

OT:这可能是偏离主题的,因为问题明确提到了BOOST库。

我个人的经验是,C ++的单元测试框架实际上更适合C ++语言(利用C ++语言本身;不盲目复制旧的单元测试框架设计),更易于配置(只使用完整的实现复制一个文件;没有外部依赖关系),并且更容易使用。

查看Catch单元测试框架。它还很好地支持了测试驱动开发和行为驱动开发。

(例如,nanodbc项目经过一些评估后最近从BOOST切换到Catch。现有的测试几乎可以通过机械方式重写 - 通过编辑器工具替换。)