提升测试:如何编写参数化测试用例

7

我有一个 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宏,但我不确定它在这种情况下是否相关。


1
这个答案可能对你有用(我没有测试代码):https://dev59.com/4msz5IYBdhLWcg3wJUjJ#8110228 - user1252091
2个回答

3

请查看BOOST_DATA_TEST_CASE,它可以完全满足您的需求。在Boost 1.62中推出。

(这个问题有点老了,但当我搜索如何做到这一点时,它是我找到的第一个结果)


1
我不认为有Boost支持,所以我这样做:

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>();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接