2014-09-23 9 views
12

Ho un set di digitato nei test di prova in google test. Tuttavia, alcuni di questi casi di test semplicemente non sono applicabili per un parametro di tipo specifico. Considera questo esempio:Come segnalare che un test vuole saltare se stesso

TYPED_TEST_P(TheTest, ATest){ 
    if(TypeParam::isUnsuitedForThisTest()){ 
     return; 
    } 
    // ... real test code goes here 
} 

Questo funziona bene, il test viene semplicemente saltato. Tuttavia, quando l'esecuzione delle prove, vedo un normale

[ RUN  ] XYZ/TheTest/0.ATest 
[  OK ] XYZ/TheTest/0.ATest (0 ms) 

quindi non è evidente che il test è stato saltato, sembra che semplicemente riuscito. Voglio in qualche modo mostrare che il test case è stato saltato. C'è un qualche tipo di metodo in google test per segnalare che un test case è stato saltato. Qualcosa di simile (questo non esiste):

TYPED_TEST_P(TheTest, ATest){ 
    if(TypeParam::isUnsuitedForThisTest()){ 
     SIGNAL_SKIPPED(); // This is what I would like to have 
     return; 
    } 
    // ... real test code goes here 
} 

Poi, l'uscita cambierebbe a qualcosa di simile:

[ RUN  ] XYZ/TheTest/0.ATest 
[ SKIPPED ] XYZ/TheTest/0.ATest (0 ms) 

C'è una caratteristica in GTEST che consente a un tale comportamento?

+0

In base al nome dei test, è possibile utilizzare [filtri] (https://code.google.com/p/googletest/wiki/V1_6_AdvancedGuide#Running_a_Subset_of_the_Tests) per eseguire solo un sottoinsieme dei test. –

+2

@JustinWood: lo so. Ma questa è una cosa totalmente diversa. – gexicide

+1

che ne dici di sottoporre test con requisiti/applicabilità diversi in un banco di prova diverso? –

risposta

8

mi si avvicinò con una soluzione ancora accettabile semplice:

Basta stampare una linea salto ulteriore me stesso utilizzando una macro:

#define CHECK_FEATURE_OR_SKIP(FEATURE_NAME) \ 
do{\ 
    if(!TypeParam::hasFeature(FEATURE_NAME)) {\ 
    std::cout << "[ SKIPPED ] Feature " << #FEATURE_NAME << "not supported" << std::endl;\ 
    return;\ 
    }\ 
} while(0) 

allora posso semplicemente utilizzare questa macro:

TYPED_TEST_P(TheTest, ATest){ 
    CHECK_FEATURE_OR_SKIP(MyFeatureXY); 
    // ... real test code goes here 
} 

Il risultato sarà il seguente:

[ RUN  ] XYZ/TheTest/0.ATest 
[ SKIPPED ] Feature MyFeatureXY not supported 
[  OK ] XYZ/TheTest/0.ATest (0 ms) 

L'unico piccolo difetto è che esiste ancora una riga OK, ma almeno è evidente che il test case è stato saltato e anche la funzione mancante è visualizzata in modo ordinato. Un altro difetto è che un test runner della GUI non mostrerà il salto in modo ordinato, ma non mi interessa perché utilizzo solo gli strumenti della riga di comando per eseguire i test case.

Problemi correlati