Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Google测试中断言执行时间? 我使用谷歌的C++测试框架GTest.我想根据函数的 执行时间,例如,如果函数foo()的执行时间超过3ms,则会失败。 我找不到ASSERT语句来实现这一点。gtest不包括这样的功能吗?_C++_Assert_Googletest - Fatal编程技术网

如何在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系统的常见功能,因此我希望单元测试不应该关心这一点。该错误最近被拒绝并关闭