gpt4 book ai didi

c++ - 使用 __debugbreak 在 GoogleTest 中捕获自定义断言

转载 作者:行者123 更新时间:2023-11-30 05:25:26 28 4
gpt4 key购买 nike

在 Windows 上,我的断言宏基本上如下所示:

#define MYASSERT(condition) (if (!(condition)) { ReportFailture( #condition, __FILE__, __LINE__, __FUNCTION__); __debugbreak(); }

在 Google Test 中,我试图检查不良条件的输出以测试越界断言等:

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) 中的调试异常作为一种特殊情况进行处理。但是,我想捕获断言并验证其内容。

正确的做法是什么?我是否需要为谷歌测试定义一个特殊断言宏?如果是,它应该做什么?

我注意到用 assert(false) 替换我的 assert(通过 assert.h 包含)并没有出现这个问题 - 它有什么不同之处?

最佳答案

问题是您正在调用 __debugbreak(),这会导致您的代码抛出断点异常。正如您在死亡测试文档 ( https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#death-tests ) 中看到的那样,如果代码抛出异常,则它不会被 googletest 中的死亡测试视为“死亡”。

就您的其他问题而言,assert.h 中的assert 调用std::abort(这会导致程序终止)。根据死亡测试的定义,这就是“死亡”。

关于c++ - 使用 __debugbreak 在 GoogleTest 中捕获自定义断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38254327/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com