【问题标题】:Boost unit test: adding a helper method or private functionBoost 单元测试:添加辅助方法或私有函数
【发布时间】:2015-05-28 02:12:20
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    幸运的是,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 仍然有效,链接已更新。

    【讨论】:

    • 谢谢。 BOOST_FIXTURE_TEST_CASE 是否作为方法添加到TestContext?有没有办法在TestContext{} 范围内编写它们?对于风格和组织,我更高兴看到一组{} 中的所有内容。 (还有助于 IDE 和代码折叠。)
    • 我的大部分课程都有一个单独的测试夹具TestContext,这就是为什么我不需要额外的组织范围。如果您查看unit_test_suite.hpp,您可以找到BOOST_FIXTURE_TEST_CASE 的定义。这可能会让你知道它是否可能。更好的是:试试看,会出什么问题?
    猜你喜欢
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 2013-03-06
    • 1970-01-01
    • 2011-08-03
    • 2013-11-12
    • 1970-01-01
    相关资源
    最近更新 更多