2013-10-16 11 views
5

Ho due classi che condividono esattamente la stessa API e funzionalità (stanno avvolgendo API di terze parti diverse per fornire la stessa funzionalità). Le due classi fanno non hanno un'interfaccia/classe di base comune.Ripetere un test dell'unità Boost con diverso tipo di classe

Ho un test dell'unità di boost per uno di loro e vorrei eseguire gli stessi test esatti dall'altro, ma al momento so solo come copiare e incollare il test e trovare/sostituire il nome della classe. Oltre ad essere noioso dover aggiornare i test in due punti, significa anche che non vi è alcuna garanzia che le due classi vengano testate in modo identico.

C'è un modo per 'modello' di prova? In caso contrario, come risolverebbe questo? Tutto quello che viene in mente finora è qualcosa di simile (scusate il pseudo codice):

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

Ma io non so nemmeno se questo dovrebbe funzionare.

risposta

4

Si dovrebbe guardare a Test case template poiché forniscono un modo per eseguire una stessa serie di test utilizzando tipi di dati diversi. Da quello che ho capito, utilizzando le macro auto-registrazione, è possibile fornire un modello di test case:

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

dove tests_types è una lista MPL di tipi:

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

Coloro esempio sono estratti e adattato da la documentazione del test Boost.

Problemi correlati