我的一些代码使用
抛出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,因为测试执行会在第一个异常时被“取消”。
我也不想改变投掷代码。
感谢您的任何想法!
答案 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()的回声
希望这有帮助。