谷歌测试友好的替代c++ assert()

googletest friendly alternative to C++ assert()?

本文关键字:c++ assert 测试 谷歌      更新时间:2023-10-16

我正在编写一个新类,其中我插入了一个c++ assert()来验证状态的正确性。

我想使用googletest来验证这个断言是否以我期望的方式被调用,但我似乎找不到一种方法来做到这一点。

我应该抛出异常,而不是有一些其他的googletest-test -test的方式来验证对象的状态?

编辑:我也对gmock替代品持开放态度(现在正在研究)。

断言在不同的平台上表现不同。如果他们打印消息并终止您的程序,您可以使用Google Test的死亡测试来验证它们。将预期终止程序的语句放入EXPECT_DEATH宏中:

EXPECT_DEATH(MyFunction(with_argument_that_causes_it_to_abort), "");

这将在子进程中运行语句并验证语句是否终止它。您可以在第二个参数中提供正则表达式以匹配子流程输出。这个宏是专门用来验证类似断言的调用的。

使用Visual Studio构建的代码可能会显示一个对话框并等待用户的反应,而不是打印消息,这使得死亡测试不方便。但是您应该能够配置断言行为来避免这样做。

如果你正在使用googletest,你不应该使用ASSERT_TRUE()而不是assert()吗?也就是说,根据我对http://code.google.com/p/googletest/wiki/Primer的阅读,您应该能够使用assert(), ASSERT_TRUE()或throw来导致测试失败。

对于异常和assert,如果你知道在释放给用户时永远不会遇到错误条件,你应该使用assert(假设其他系统组件的行为正确)。如果错误条件可能是由用户的输入引起的,则应该抛出异常。