2013-10-02 7 views
5

Korzystam z Gtestu testowania C++ Google. Chciałbym przetestować funkcję przeciwko jego czasowi wykonania , np. funkcja foo() kończy się niepowodzeniem, jeśli jej wykonanie trwa dłużej niż 3ms. Nie mogę znaleźć instrukcji ASSERT, aby to osiągnąć. Czy gtest nie zawiera takiej funkcji?Jak zapewnić czas wykonania w Google Test?

Odpowiedz

5

Dlaczego nie korzystać z takiego prostego rozwiązania?

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

Obawiam precyzja nie jest wystarczająco wysoka .. Coś 'QueryPerformanceCounter()' będzie lepiej. – Chen

+1

To tylko meta code, możesz użyć tego, czego chcesz zamiast zegara. – fghj

+0

Tak, powinieneś to wskazać, ponieważ zwykle 'clock()' ma małą precyzję. – Chen

0

Znalazłem sposób na wykorzystanie statystyk, które GoogleTest drukuje w tym celu. Jest to na poziomie programu, ale prawdopodobnie możesz zrobić to samo w TearDownTestCase(), aby sprawdzić prędkość sprawdzania poprawności w podzbiorze. Dzieje się tak dlatego, że istnieje funkcja członkowska TestCase-level na poziomie elapsed_time.

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

Reprezentatywne wyniki:

[==========] 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