我正在编写一个新类,我插入了一个C ++ assert()
来验证状态的正确性。
我想用googletest验证这个断言是以我期望的方式调用的,但我似乎找不到办法来做到这一点。
我应该抛出异常,还是有其他一些googletest可测试的方法来验证对象的状态?
编辑:我也对gmock替代品持开放态度(现在正在调查)。
答案 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来使测试失败。
在例外与断言的情况下,如果您知道在释放给用户时永远不会遇到错误条件(假设其他系统组件的正确行为),则应使用断言。如果某种方式可以由用户的输入引起错误条件,则应该抛出异常。