Распечатать исключение. What () в Google Test - PullRequest
4 голосов
/ 11 января 2011

некоторые из моих кодовых бросков, используя

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 голосов
/ 31 октября 2013

Я использую gtest, предоставленный gmock-1.7.0.Вот что я сделал из каталога 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-> what ()

Надеюсь, это поможет.

...