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