2013-10-16 15 views
5

Ich habe zwei Klassen, die genau die gleiche API und Funktionalität teilen (sie umhüllen verschiedene APIs von Drittanbietern, um die gleiche Funktionalität zu bieten). Die zwei Klassen haben nicht haben eine gemeinsame Basisklasse/Schnittstelle.Wiederholen Sie einen Boost Unit-Test mit verschiedenen Klassen

Ich habe einen Boost-Unit-Test für einen von ihnen und möchte die gleichen genauen Tests auf dem anderen ausführen, aber im Moment weiß ich nur, wie Sie den Test kopieren und einfügen und den Klassennamen finden/ersetzen. Es ist nicht nur ärgerlich, dass Tests an zwei Stellen aktualisiert werden müssen, sondern es gibt auch keine Garantie, dass die beiden Klassen identisch getestet werden.

Gibt es eine Möglichkeit, einen Testfall zu "schablonieren"? Wenn nicht, wie würdest du das lösen? Alles, was ich so weit denken kann, so etwas wie (den Pseudo-Code entschuldigen):

template<class T> 
void runTests() 
{ 
T t; 
//do tests here 
} 

BOOST_AUTO_TEST_CASE(test_X) 
{ 
runTests<X>(); 
} 
BOOST_AUTO_TEST_CASE(test_Y) 
{ 
runTests<Y>(); 
} 

Aber ich weiß nicht einmal, ob dies funktionieren würde.

Antwort

4

Sie sollten sich Test case template ansehen, da sie eine Möglichkeit bieten, dieselben Tests mit verschiedenen Datentypen auszuführen. Von dem, was ich verstehe, den Auto-Registrierung Makros verwenden, können Sie eine Testfall-Vorlage zur Verfügung stellen:

BOOST_AUTO_TEST_CASE_TEMPLATE(my_test, T, test_types) 
{ 
    BOOST_CHECK(checkSomethingWithType(T)); 
} 

wo tests_types eine MPL Liste von Typen ist:

typedef boost::mpl::list<X, Y> test_types; 

Derjenigediejenigedasjenige Beispiel extrahierte und adaptiert von die Boost-Testdokumentation.