2011-01-11 13 views
4

私のコードの一部は、私は自動的に私のテストを実行するには、Googleのテストとチームシティーを使用していますプリントexception.what()

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

を使用してスローします。 Windows上で動作しているので、予期しない例外が発生した場合、テストを失敗として報告するために--gtest_catch_exceptionsパラメータを使用します。しかし、Google Testは単に

Exception thrown with code 0xe06d7363 in the test body. 
in (null) line -1 

などのメッセージでテストに失敗しますが、これはあまり役に立ちません。私はむしろ、私は法に

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

を実装するカスタムTestListenerを持って

Exception thrown: "a bad thing happened: ..." 

のようなメッセージを持っていると思いますが、Googleのテストでキャッチされた例外への参照がないように思えます。例外をstd :: coutまたは他の場所に報告する他の方法はありますか?

テストの実行は、最初の例外に「キャンセル」を取得しますので、私は、--gtest_catch_exceptionsなし

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

を使用することはできませんのでご注意ください。

また、スローコードを変更したくない場合もあります。

ありがとうございました!

+0

使用しているgoogletestのバージョンは何ですか?あなたが望むように自動的に文字列を出力するようにトランクがサポートされているようです。 –

答えて

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 ::の代わりに(私が投げるすべてがその由来し)..の例外をキャッチし、エコーを追加しましたe-> what()

これが役に立ちます。