gtest中有没有办法让内联/测试用例甚至测试超时。 例如,我想做的事情如下: EXPECT_TIMEOUT(5秒,myFunction());
我从2010年12月9日发现此问题googletest问题为“类型:增强”。 https://code.google.com/p/googletest/issues/detail?id=348
看起来这篇文章没有gtest方式。 我可能不是第一个试图找到解决方法的人。
我能想到的唯一方法是让子线程运行该函数,如果它没有返回 时间限制,父线程将终止它并显示超时错误。
有没有办法不用线程? 还是其他任何方式?
答案 0 :(得分:3)
我刚刚遇到过这种情况。
我想为我的反应堆添加一个失败的测试。反应堆永远不会完成。 (它必须首先失败)。但我不希望测试永远运行。
我跟着你的链接,但仍然不喜欢那里。所以我决定使用一些C ++ 14的功能,这使它相对简单。
但我实现了这样的超时:
TEST(Init, run)
{
// Step 1 Set up my code to run.
ThorsAnvil::Async::Reactor reactor;
std::unique_ptr<ThorsAnvil::Async::Handler> handler(new TestHandler("test/data/input"));
ThorsAnvil::Async::HandlerId id = reactor.registerHandler(std::move(handler));
// Step 2
// Run the code async.
auto asyncFuture = std::async(
std::launch::async, [&reactor]() {
reactor.run(); // The TestHandler
// should call reactor.shutDown()
// when it is finished.
// if it does not then
// the test failed.
});
// Step 3
// DO your timeout test.
EXPECT_TRUE(asyncFuture.wait_for(std::chrono::milliseconds(5000)) != std::future_status::timeout);
// Step 4
// Clean up your resources.
reactor.shutDown(); // this will allow run() to exit.
// and the thread to die.
}
现在我的测试失败,我可以编写修复测试的代码。