7

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

4

3 回答 3

6

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

//pseudo code
clock_t t = clock();
foo();
const double work_time = (clock() - t) / double(CLOCKS_PER_SEC);
ASSERT_TRUE(work_time <= 0.003);
于 2013-10-02T11:31:11.053 回答
5

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

于 2013-10-02T11:28:56.903 回答
2

我找到了一种使用 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 次残疾测试

FrameworkTest.cpp(39): 错误: 预期: (elapsed) < (measurePerf ? 190 * 1000 : 170 * 1000), 实际: 207723 vs 170000

于 2014-09-27T20:21:09.080 回答