2013-10-02 9 views
5

Sto utilizzando il framework di test C++ di Google Gtest. Vorrei testare una funzione contro il suo tempo di esecuzione , ad es. function foo() fallisce se la sua esecuzione è più lunga di 3ms. Non sono riuscito a trovare una dichiarazione ASSERT per raggiungere questo obiettivo. Non è possibile includere una funzionalità del genere?Come affermare il tempo di esecuzione in Google Test?

risposta

5

Perché non utilizzare tale soluzione semplice?

//pseudo code 
clock_t t = clock(); 
foo(); 
const double work_time = (clock() - t)/double(CLOCKS_PER_SEC); 
ASSERT_TRUE(work_time <= 0.003); 
+0

temo la precisione non è abbastanza alta .. Qualcosa di simile a 'QueryPerformanceCounter()' sarebbe meglio. – Chen

+1

E 'solo un meta-codice, puoi usare quello che vuoi invece dell'orologio. – fghj

+0

Sì, dovresti indicarlo, come di solito 'clock()' ha bassa precisione. – Chen

0

Ho trovato un modo per utilizzare le statistiche che GoogleTest stampa per questo. Questo è a livello di programma, ma probabilmente potresti fare lo stesso in TearDownTestCase() per verificare la velocità di controllo in un sottogruppo. Questo perché c'è una funzione membro elapsed_time a livello di TestCase.

int main(int argc, char* argv[]) 
{ 
    ::testing::InitGoogleTest(&argc, argv); 
    auto result(RUN_ALL_TESTS()); 
    ::testing::internal::TimeInMillis elapsed(
     ::testing::UnitTest::GetInstance()->elapsed_time()); 
    ASSERT_LT(elapsed, measurePerf ? 180 * 1000 : 215 * 1000); 
    return result; 
} 

Rappresentante dei risultati:

[==========] 338 tests from 18 test cases ran. (207723 ms total) [ PASSED ] 338 tests.

YOU HAVE 13 DISABLED TESTS

FrameworkTest.cpp(39): error: Expected: (elapsed) < (measurePerf ? 190 * 1000 : 170 * 1000), actual: 207723 vs 170000