在Windows上,我的断言宏基本上是这样的:
#define MYASSERT(condition) (if (!(condition)) { ReportFailture( #condition, __FILE__, __LINE__, __FUNCTION__); __debugbreak(); }
在谷歌测试中,我试图检查一个不良条件的输出来测试超出限制的断言等:
ASSERT_DEATH( { MYASSERT(false); }, "");
然而,所有这一切都会报告以下消息:
Running main() from gtest_main.cc
..\Test\FormatUnitTest\Test_Format.cpp(59): error: Death test: { if (!(false)) { ReportFailture( "false", ..\\Test\\UnitTest\\Test.cpp", 59, __FSTREXP __FUNCTION_
_ ); __debugbreak(); }; }
Result: illegal return in test statement.
Error msg:
[ DEATH ]
似乎GoogleTest正在处理结构化异常处理程序(SEH)中的调试异常作为一种特殊情况。但是,我想抓住断言并验证它的内容。
这里的举动是什么?我是否需要为Google测试定义特殊断言宏?如果是这样,该怎么办?
我注意到用assert(false)替换我的断言(通过assert.h包含)不会调用这个问题 - 它有什么不同的做法?
答案 0 :(得分:1)
问题是您正在调用__debugbreak()
,这会导致代码抛出断点异常。正如您在死亡测试文档(https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#death-tests)中所看到的,如果代码抛出异常,则googletest中的死亡测试不会将其视为“死亡”。
就你的其他问题而言,来自 assert.h 的assert
calles std::abort
(导致程序终止)。根据死亡测试的定义,这是“死亡”。