【问题标题】:How to run a function after all test cases BOOST c++在所有测试用例BOOST c ++之后如何运行函数
【发布时间】:2016-03-20 17:09:50
【问题描述】:

我有问题,我在琢磨;如果 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 中有先前的声明。

提前谢谢你。问候。

【问题讨论】:

  • 您正在寻找fixtures——可能是global fixture
  • 或者,如果你想实际创建一个main(),有一种方法redefine the entry point
  • @DanMašek 就是这样,谢谢!我测试了,这就是我要找的!
  • 好的,我会写下来作为答案。

标签: c++ unit-testing boost


【解决方案1】:

至少有两种可能的方法来解决这个问题。

第一种是使用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()

【讨论】:

    【解决方案2】:

    OT:这可能是题外话,因为问题明确提到了 BOOST 库。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      相关资源
      最近更新 更多