gpt4 book ai didi

c++ - GoogleMock 显示更详细的调试信息

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:41:33 26 4
gpt4 key购买 nike

我在工作中使用 googlemock。我们经常使用 EXPECT_THROW、EXPECT_NO_THROW 等...

我的问题是,当一个函数被包装在 EXPECT_NO_THROW 中但实际上抛出异常(即代码错误)时,如何让 googlemock 输出异常详细信息和堆栈跟踪?

我得到的唯一输出是它抛出异常并未能通过测试...这对于调试根本原因没有用。

最佳答案

EXPECT_THROW , EXPECT_NO_THROW等实际上是 Google Test 的一部分而不是 Google Mock。

除了破解 gtest 源之外,我不知道有什么方法可以获取有关异常的更多信息。对于 std::exception仅此而已,以下更改至少应输出异常的 what()EXPECT_NO_THROWASSERT_NO_THROW失败。

在 gtest/include/gtest/internal/gtest-internal.h 中,在第 1140 行附近,更改 GTEST_TEST_NO_THROW_宏:

#define GTEST_TEST_NO_THROW_(statement, fail) \
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
if (::testing::internal::AlwaysTrue()) { \
try { \
GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
} \
catch (...) { \
try { \
std::exception_ptr exceptn_ptr(std::current_exception()); \
std::rethrow_exception(exceptn_ptr); \
} catch(const std::exception& exceptn) { \
std::cerr << exceptn.what() << '\n'; \
} \
goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \
} \
} else \
GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \
fail("Expected: " #statement " doesn't throw an exception.\n" \
" Actual: it throws.")

您显然可以在此处添加更多功能;捕获自定义异常类型,格式化失败消息以包含异常信息等。

关于c++ - GoogleMock 显示更详细的调试信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11439525/

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