谷歌测试友好的替代c++ assert()
googletest friendly alternative to C++ assert()?
我正在编写一个新类,其中我插入了一个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(假设其他系统组件的行为正确)。如果错误条件可能是由用户的输入引起的,则应该抛出异常。
相关文章:
- 如何在 assert() 和 static_assert() 之间调度,如果在 constexpr 上下文中依赖?
- 我关于函数"Assert"的C++代码有问题
- assert() 在发布模式下充当标识函数吗?
- 如何编写一个接受如下断言消息的自定义断言函数:assert(false) << "assertio
- 我可以禁用 GCC 的 assert() 的 noreturn 属性吗?
- 能够使用debug.assert()函数需要什么
- (公开简历)ASSERT: "false" in file qasciikey.cpp
- ASSERT: "allArguments.size() == origArgc"
- Qt5 - ASSERT: "bytesTransferred == writeChunkBuffer.size()"
- VS2017 MFC Assert: f:ddvctoolsvc7libsshipatlmfcinclude
- C++ EXPECT_EQ & ASSERT inside for loop
- 为什么 MonitoringManager::OnRequestSucceeded() 中的 assert(s_moni
- 如何正确调用 Assert::ExpectException
- 使用 assert 帮助编译器更好地优化
- 自定义"assert"宏,支持逗号和错误消息
- 是否可以有一个零成本assert(),这样代码就不必在调试和发布版本之间进行修改
- 如何在 Google 测试中抑制终止时 assert() 意外触发
- VS2010: assert "vector iterators incompatible" in std::vector.clear()
- boost shared_ptr assert失败,但值不是null
- 如何使用assert函数