c++ - boost 单元测试 : adding a helper method or private function

标签 c++ unit-testing boost boost-test

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

如果测试用例是一个类(而不是宏),我会简单地使用私有(private)成员函数。我如何为 Boost 单元测试用例执行此操作(或等效操作)?

最佳答案

幸运的是,在 Boost 测试框架中有一个解决方案:Fixtures。有不同类型的固定装置,但在您的情况下是 per test case fixture似乎很合适。

#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);
    // ...
}

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

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

关于c++ - boost 单元测试 : adding a helper method or private function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30496087/

相关文章:

c++ - 是否可以预测 srand(time(0)) 的随机数?

c++ - 有没有办法结合 Qt-Creator + Boost 库?

c++ - 如何在另一个线程中暂停/中断 boost::thread?

c# - 使用 Linq to SQL 进行单元测试实践

c++ - 如何禁用 Boost 概念检查

C++ 将 char 数组转换为 int 表示

c++ - 64 位 G++ 4.6.3 不会将 longs 视为专用函数模板中的 long longs,即使它们的大小相同。这是一个错误吗?

c++ - 访问 union 中相同类型的非事件成员

unit-testing - 使用随机输入的最佳实践进行测试

Laravel Mock with Mockery 有错误 "no expectations were specified"