【问题标题】:Boost Test: How to write parameterized test casesBoost Test:如何编写参数化测试用例
【发布时间】:2013-01-07 12:19:50
【问题描述】:

我有一个 boost 测试用例。无论参数如何,都会执行此测试用例的大多数行。但是有些部分是根据提供的参数执行的。我想避免编写两个单独的测试用例,除了一些小部分之外几乎相同。所以我需要使用类似下面的方法来创建参数化的测试用例:

BOOST_FIXTURE_TEST_CASE(caseA, Fixture)
{
    TestFunction("parameterA");
}

BOOST_FIXTURE_TEST_CASE(caseB, Fixture)
{
    TestFunction("parameterB");
}

void TestFunction(string param)
{
    // ...
    // lots of common checks regardless of parameters
    // ...
    if(param == "parameterA")
        BOOST_CHECK(...);
    else if(param == "parameterB")
        BOOST_CHECK(...);
}

有没有其他方法可以更方便地实现我的目标?我可以找到 BOOST_PARAM_CLASS_TEST_CASE 宏,但我不确定它在这种情况下是否相关。

【问题讨论】:

标签: unit-testing boost boost-test parameterized-unit-test


【解决方案1】:

查看 BOOST_DATA_TEST_CASE,它可以满足您的需求。 boost 1.62 中的新功能。

(这个问题有点老了,但是当我搜索如何做到这一点时,这是第一个命中)

【讨论】:

    【解决方案2】:

    没有 Boost 支持 AFAIK,所以我这样做:

    void test_function(parameters...)
    {
        <test code>
    }
    
    BOOST_AUTO_TEST_CASE(test01) {
        test_function(parameters for case #1)
    }
    
    BOOST_AUTO_TEST_CASE(test02) {
        test_function(parameters for case #2)
    }
    

    如果你喜欢模板,你可以这样做:

    template<int I, bool B>
    void test_function()
    {
        for(int i=0; i<I; i++)
            if (B) BOOST_REQUIRE(i<10);
    }
    
    BOOST_AUTO_TEST_CASE(test01) {
        test_function<10, true>();
    }
    
    BOOST_AUTO_TEST_CASE(test02) {
        test_function<20, false>();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 2012-10-03
      相关资源
      最近更新 更多