谷歌友好的替代C ++断言()?

时间:2011-12-07 03:58:32

标签: c++ assert googletest

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

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

我应该抛出异常,还是有其他一些googletest可测试的方法来验证对象的状态?

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

2 个答案:

答案 0 :(得分:2)

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

EXPECT_DEATH(MyFunction(with_argument_that_causes_it_to_abort), "");

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

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

答案 1 :(得分:-1)

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

在例外与断言的情况下,如果您知道在释放给用户时永远不会遇到错误条件(假设其他系统组件的正确行为),则应使用断言。如果某种方式可以由用户的输入引起错误条件,则应该抛出异常。