如何在谷歌测试中断言执行时间

How to assert execution time in Google Test?

本文关键字:中断 断言 执行时间 测试 谷歌      更新时间:2023-10-16

我正在使用Google的C++测试框架Gtest。我想针对其测试一个函数执行时间,例如,如果函数 foo() 的执行时间超过 3ms,则执行时间将失败。我找不到 ASSERT 语句来实现这一点。gtest 不包括这样的功能吗?

为什么不使用这么简单的解决方案?

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

可能不存在,因为该错误仍然处于打开状态:http://code.google.com/p/googletest/issues/detail?id=348

我找到了一种方法来使用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;
}

代表性结果:

[==========]

运行了来自 18 个测试用例的 338 个测试。(总共 207723 毫秒)[ 通过 ] 338 次测试。

您有 13 个已禁用的测试

框架测试.cpp(39): 错误: 预期:(已用)<(测量性能 ? 190 * 1000 : 170 * 1000), 实际:207723 与 170000