2013-01-07 14 views
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マクロを見つけることができましたが、このケースでは関連があるかどうかはわかりません。

+1

[この回答](http://stackoverflow.com/a/8110228/1252091)が役に立つかもしれません(私はコードをテストしていません)。 –

+0

[BOOST \ _PARAM \ _TEST \ _CASEをboost :: testの自動登録で使用することはできますか?](http://stackoverflow.com/questions/8084038/is-it-possible-to-use-ブースト - パラメ - テスト - ケース - 自動 - ブースト - オンブースト) –

答えて

1

私の知る限りではありませんブーストのサポートので、私はこれを行う:

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>(); 
} 
関連する問題