Boost单元测试:添加辅助方法或私有函数

SRo*_*mes 4 c++ boost unit-testing boost-test

我有一个BOOST_AUTO_TEST_CASE需要帮助功能的工具。我可以将其设为常规函数并从内部调用它;但是我宁愿以某种方式使其在范围内保持本地和私有BOOST_AUTO_CASE。我还希望能够声明属于测试用例和辅助函数(例如const int serverCount = 10;)范围内的var 。

如果测试用例是一个类(而不是宏),我将只使用一个私有成员函数。如何对Boost单元测试用例进行此操作(或等效操作)?

Tob*_*obi 5

幸运的是,Boost测试框架中有一项针对此权利的解决方案:夹具。固定装置的类型不同,但在您的情况下,每个测试用例的固定装置似乎都合适。

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

struct TestContext {
    TestContext() : testVar( 0 ) { BOOST_TEST_MESSAGE( "setup fixture" ); }
    ~TestContext()               { BOOST_TEST_MESSAGE( "teardown fixture" ); }

    int testVar;

    void helperMethod(int x, double y)
    {
        testVar = x * (int)y;
    }
};

BOOST_FIXTURE_TEST_CASE( test_case1, TestContext )
{
    BOOST_CHECK( testVar == 1 );
    ++testVar;
}

BOOST_FIXTURE_TEST_CASE( test_case2, TestContext )
{
    helperMethod(2, 3.1);
    // ...
}
Run Code Online (Sandbox Code Playgroud)

testVar在测试用例以及TestContext类/结构中都可以访问。TestContext的构造函数和析构函数分别在每个测试用例之前和之后调用。它们不是必需的,但是例如在您必须管理内存时可以派上用场。特别是,每个测试用例都以其自己的新鲜实例运行TestContext

更新:对Boost 1.66仍然有效,链接已更新。