在Google Test中打印exception.what()

时间:2011-01-11 08:06:02

标签: c++ unit-testing googletest

我的一些代码使用

抛出
if (failure)
  throw std::runtime_error("a bad thing happened: ...");

我正在使用Google Test和TeamCity自动执行我的测试。它在Windows上运行,因此如果发生意外异常,我会使用--gtest_catch_exceptions参数将测试报告为失败。但是,Google Test只是通过

这样的消息来完成测试
Exception thrown with code 0xe06d7363 in the test body.
in (null) line -1

这不是很有帮助。我宁愿有像

这样的消息
Exception thrown: "a bad thing happened: ..."

我有一个自定义的TestListener来实现方法

OnTestPartResult( const ::testing::TestPartResult& test_part_result)

但似乎没有引用Google Test捕获的异常。有没有其他方法向std :: cout或其他地方报告异常?

请注意我不能使用

try
{
    return RUN_ALL_TESTS();
}
catch (std::exception& e)
{
    std::cout << "EXCEPTION: " << e.what();
    return -1;
}
catch (...)
{
    return -1;
}

没有--gtest_catch_exceptions,因为测试执行会在第一个异常时被“取消”。

我也不想改变投掷代码。

感谢您的任何想法!

1 个答案:

答案 0 :(得分:0)

我正在使用gmock-1.7.0提供的gtest。这是我在gmock-1.7.0目录中所做的:

diff --git a/gtest/include/gtest/internal/gtest-internal.h b/gtest/include/gtest/internal/gtest-internal.h
index 0dcc3a3..265093b 100644
--- a/gtest/include/gtest/internal/gtest-internal.h
+++ b/gtest/include/gtest/internal/gtest-internal.h
@@ -1075,7 +1075,8 @@ class NativeArray {
     try { \
       GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
     } \
-    catch (...) { \
+    catch (std::exception *e ) { \
+       std::cout << e->what() << std::endl;  \
       goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \
     } \
   } else \

在英语中,我明确地捕获了std :: exception而不是..(我抛出的所有东西都来自于此),并添加了e-&gt; what()的回声

希望这有帮助。