2013-01-07 4 views
7

J'ai un test de boost. La plupart des lignes de ce cas de test sont exécutées indépendamment des paramètres. Mais certaines parties sont exécutées en fonction du paramètre fourni. Je veux éviter d'écrire deux cas de test distincts qui sont presque identiques sauf dans certaines parties mineures. Je dois donc utiliser quelque chose comme l'approche suivante pour créer des cas de test paramétrées:Boost Test: Comment écrire des cas de test paramétrés

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

est-il un autre moyen d'atteindre mon objectif d'une manière plus pratique? Je pourrais trouver la macro BOOST_PARAM_CLASS_TEST_CASE mais je ne suis pas sûr si c'est pertinent dans ce cas.

+1

[Cette réponse] (http://stackoverflow.com/a/8110228/1252091) peut vous être utile (je n'ai pas testé le code). –

+0

duplication possible de [Est-il possible d'utiliser BOOST \ _PARAM \ _TEST \ _CASE avec enregistrement automatique sur boost :: test?] (Http://stackoverflow.com/questions/8084038/is-it-possible-use-use- boost-param-test-case-with-automatique-registration-on-boost) –

Répondre

1

Pas de support Boost AFAIK, donc je fais ceci:

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

Vous pouvez le faire avec des modèles si vous les aimez:

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