关于google测试和断言输出(测试结果)的问题;当 gtest 说测试通过时,我可以相信吗?

Posted

技术标签:

【中文标题】关于google测试和断言输出(测试结果)的问题;当 gtest 说测试通过时,我可以相信吗?【英文标题】:Questions about google test and assertion output (test results); can I trust when gtest says a test passed? 【发布时间】:2016-08-13 15:47:30 【问题描述】:

当我创建TESTTEST_F 测试时,我如何知道我的断言实际上正在执行?

我遇到的问题是,例如,当我有一个空的TEST_F 时,

TEST_F(myFixture, test1) 

当它运行时,gtest 说这个测试通过了。在我编写测试代码之前,我本来预计测试会失败。无论如何。

所以,我的问题是当 gtest 说当测试“OK”或它通过时,我不能相信它,因为如果没有测试代码,测试可以“通过”。

最好打印出我的EXPECT_ASSERT 调用正在做什么,然后查看它们是否通过。问题是,如果我拨打任何std::cout 电话,那似乎与最后的测试结果不同步。输出消息与我自己的任何std::cout 调用都不同步。

谷歌测试是否有详细选项?如何确定我编写的 EXPECT 确实在运行?

【问题讨论】:

我认为您从头到尾考虑断言。它们不是“使测试通过所需的语句”,它们是“可能导致测试失败的语句”。因此,我认为您基本上是在问“我如何确保每个测试用例至少执行一个断言?”。 另外,您可以通过代码工作之前编写它们并观察它们失败以确保它们因正确的原因而失败,从而确保您的测试有用。 是的。如何确保断言执行? 做出一个总是失败的断言(类似于ASSERT(false);)并检查它是否说你的测试失败了。 @mycodeplanet 同上,你写了一个失败的测试,然后让它通过。谷歌“测试驱动开发”。 【参考方案1】:

您可以考虑查看 TDD、测试驱动开发、https://en.wikipedia.org/wiki/Test-driven_development

写一个测试 => 它会失败 编写代码使测试通过 => 测试通过

冲洗并重复:将每个需求表达为测试,最初失败。编写代码使测试通过。

【讨论】:

以上是关于关于google测试和断言输出(测试结果)的问题;当 gtest 说测试通过时,我可以相信吗?的主要内容,如果未能解决你的问题,请参考以下文章

关于单元测试编写,我的一些思考和总结

关于单元测试编写,我的一些思考和总结

Google Test -- C++单元测试框架

Google Test -- C++单元测试框架

如何通过 Google 测试捕捉断言?

Java 单元测试如何断言(检查)控制台输出