如何在Google测试中断言执行时间? 我使用谷歌的C++测试框架GTest.我想根据函数的 执行时间,例如,如果函数foo()的执行时间超过3ms,则会失败。 我找不到ASSERT语句来实现这一点。gtest不包括这样的功能吗?
可能不存在,因为错误仍然存在:如何在Google测试中断言执行时间? 我使用谷歌的C++测试框架GTest.我想根据函数的 执行时间,例如,如果函数foo()的执行时间超过3ms,则会失败。 我找不到ASSERT语句来实现这一点。gtest不包括这样的功能吗?,c++,assert,googletest,C++,Assert,Googletest,可能不存在,因为错误仍然存在: 为什么不使用这样简单的解决方案呢 //pseudo code clock_t t = clock(); foo(); const double work_time = (clock() - t) / double(CLOCKS_PER_SEC); ASSERT_TRUE(work_time <= 0.003); //伪代码 时钟t=时钟(); foo(); 常数双工作时间=(时钟()-t)/double(时钟/秒); ASSERT_TRUE(work_ti
为什么不使用这样简单的解决方案呢
//pseudo code
clock_t t = clock();
foo();
const double work_time = (clock() - t) / double(CLOCKS_PER_SEC);
ASSERT_TRUE(work_time <= 0.003);
//伪代码
时钟t=时钟();
foo();
常数双工作时间=(时钟()-t)/double(时钟/秒);
ASSERT_TRUE(work_time我找到了一种使用GoogleTest打印出来的统计数据的方法。这是在程序级别,但您可能也可以在TearDownTestCase()
中执行相同的操作来检查子集中的健全性速度。这是因为有一个TestCase级别的appeated_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;
}
具有代表性的结果:
[============]运行了18个测试用例中的338个测试(总共207723毫秒)[
通过了338次测试
您有13个禁用的测试
FrameworkTest.cpp(39):错误:
预期:(经过)<(测量值?190*1000:170*1000),
实际:207723对170000
恐怕精度不够高。QueryPerformanceCounter()
之类的东西会更好。它只是元代码,你可以用你想要的来代替时钟。是的,你应该指出这一点,因为通常clock()
的精度很低。如果foo()呢
陷入无限循环?测试将永远不会退出。这是测试需要时间限制的关键原因。计时测试所需的时间(如您所示)非常容易,但这是停止失控测试(不会导致其他测试可能检测到的内存泄漏)这变得有点复杂。@我使用buildbot/ctest,它们都有超时,这是测试运行程序/CI系统的常见功能,因此我希望单元测试不应该关心这一点。该错误最近被拒绝并关闭