【发布时间】:2014-09-15 16:13:31
【问题描述】:
gtest 中有没有办法让内联/测试用例甚至测试超时。 例如,我想做类似的事情: EXPECT_TIMEOUT(5 秒, myFunction());
我在 2010 年 12 月 9 日发现这个问题 googletest 问题为“类型:增强”。 https://code.google.com/p/googletest/issues/detail?id=348
看起来这篇文章没有 gtest 方法。 我可能不是第一个尝试解决这个问题的人。
我能想到的唯一方法是让子线程运行该函数,如果它没有返回 时间限制父线程将杀死它并显示超时错误。
有什么方法可以不必使用线程? 还是其他方式?
【问题讨论】:
-
您可能会引入test code smell 并使测试变得脆弱。如果你真的想做,你可以自己写断言宏
-
对于断言宏,我们可能需要两个线程运行?子线程运行函数,如果没有按时返回,主线程就停下来,返回false什么的。
-
讨论似乎导致了实现讨论。由于有很多 ifs 和 whens,我建议在 googletest 或任何其他测试框架问题中讨论细节。范围太广了。是的,产生子线程可能会有所帮助,但很难说它是否强大。您也可以等待通话结束并使用秒表来确定时间
-
@DmitryLedentsov :在我的情况下等待呼叫结束是行不通的。我正在测试一个使用正则表达式的实现,并且我想确保它在匹配失败时不会调用灾难性的回溯。一个正确的实现应该少于 100ms;灾难性的回溯可能需要 10**30 秒。
-
@MartinBonner 我猜,您的算法没有取消点(因为它应该运行得非常快),如果发生“灾难性回溯”,您可能需要终止整个过程。这意味着,每个这样的测试用例都应该作为一个单独的进程运行。有多种实现方式,例如使用自定义测试工具,但是对于 SO 来说讨论太多了。开始一个带有 travis-ci 集成的 github 项目来玩转创意怎么样?
标签: googletest