7

ブーストテストケースがあります。このテスト ケースのほとんどの行は、パラメーターに関係なく実行されます。ただし、指定されたパラメーターに基づいて実行される部分があります。いくつかのマイナーな部分を除いてほとんど同じである 2 つの別個のテスト ケースを作成することは避けたいと思います。したがって、次のようなアプローチを使用して、パラメーター化されたテスト ケースを作成する必要があります。

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マクロを見つけることができましたが、この場合に関連するかどうかはわかりません。

4

2 に答える 2

1

ブーストは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>();
}
于 2016-04-08T15:47:49.063 に答える