2013-01-07 5 views
7

Ich habe einen Boost Testfall. Die meisten Zeilen dieses Testfalls werden unabhängig von den Parametern ausgeführt. Aber es gibt Teile, die basierend auf dem bereitgestellten Parameter ausgeführt werden. Ich möchte vermeiden, zwei getrennte Testfälle zu schreiben, die fast identisch sind, außer in einigen kleineren Teilen. Also brauche ich so etwas wie die folgende Vorgehensweise verwenden, um parametrisierte Testfälle zu erstellen:Boost Test: Wie parametrierte Testfälle geschrieben werden

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

Gibt es eine andere Art und Weise mein Ziel in einer bequemere Art und Weise zu erreichen? Ich könnte BOOST_PARAM_CLASS_TEST_CASE Makro finden, aber ich bin mir nicht sicher, ob es in diesem Fall relevant ist.

+1

[Diese Antwort] (http://stackoverflow.com/a/8110228/1252091) kann Ihnen nützlich sein (Ich habe den Code nicht getestet). –

+0

mögliches Duplikat von [Ist es möglich, BOOST \ _PARAM \ _TEST \ _CASE mit automatischer Registrierung auf boost :: test zu verwenden?] (Http://stackoverflow.com/questions/8084038/is-it-possible-to-use-use- Boost-Param-Testfall-mit-automatischer Registrierung-auf-Boost –

Antwort

1

AFAIK No-Boost-Unterstützung, so mache ich das:

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

Sie können es mit Vorlagen tun, wenn Sie sie mögen:

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