2013-10-02 7 views
5

私はGoogleのC++テストフレームワークGtestを使用しています。私はその実行時間(例えば、実行時間)に対して、 の関数をテストしたいと思います。関数foo()の実行が3msより長い場合、関数foo()は失敗します。 これを達成するためのASSERT文が見つかりませんでした。 gtestにはそのような機能は含まれていませんか?バグがまだ開いているようGoogle Testで実行時間をアサートする方法は?

答えて

5

、このようなシンプルなソリューションを使用しないのはなぜ?

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

私は精度が十分に高くない怖い... 'QueryPerformanceCounterの(のようなもの)'方が良いだろう。 – Chen

+1

それはちょうどメタコード、あなたは時計の代わりにあなたが望むものを使用することができます。 – fghj

+0

通常、 'clock()'の精度が低いので、それを指摘しておきます。 – Chen

0

GoogleTestがこのために印刷する統計情報を使用する方法が見つかりました。これはプログラムレベルですが、サブセット内のサニティチェック速度をTearDownTestCase()で同じにすることもできます。これは、TestCaseレベルの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; 
} 

代表的な結果:

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

関連する問題