2013-01-07 2 views
7

У меня есть тестовый тест. Большинство строк этого тестового примера выполняются независимо от параметров. Но есть части, которые выполняются на основе предоставленного параметра. Я хочу избежать написания двух отдельных тестовых примеров, которые почти идентичны, за исключением некоторых второстепенных частей. Поэтому мне нужно использовать что-то вроде следующего подхода для создания параметризованных тестовых случаев:Boost Test: Как написать параметризованные тестовые примеры

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

Нет поддержки подталкивания 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>(); 
}