2011-10-28 8 views
31

私はgoogletest C++ testing frameworkを使用しています。通常、テストを実行しているのテキスト出力は次のようになります。私はgoogletestドキュメントにLogging Additional Informationを発見したGoogleテストで追加出力を印刷する

 
[ RUN  ] MyTest.Fuzz 
[   ] random seed = 1319760587 
[  OK ] MyTest.Fuzz (1867 ms) 

 
[ RUN  ] MyTest.Fuzz 
[  OK ] MyTest.Fuzz (1867 ms) 

私は例えば出力と同じ形式で、いくつかの追加のデータを、したいと思いますしかし、それは構造化されたデータを標準のコンソール出力ではなくXML出力に送るように見えるだけです。

この形式のテキストを出力する私のユニットテストの中で呼び出すことができるgoogletest関数はありますか? coutに手動でデータを送るのですが、通常の色付きの出力は含まれていませんので、13個のスペースなどを明示的にインデントしなければなりません。

+6

投票回答:http://stackoverflow.com/a/29155677/92957 – Eugene

答えて

0

いいえ、ヘッダーを検索していないため、自分のログを途中で追加することはありません。要求するものかもしれません。必要に応じて強化タスクを記録できますhttp://code.google.com/p/googletest/issues/list

注意してください。

9

デフォルトのプリンタPrettyUnitTestResultPrinterのラッパーを作成して、テストプロパティを出力することもできます。デフォルトプリンタはlisteners.default_result_printer()(下記参照)で入手できます。それはで行われているように、あなたはあなたのテストのためのデフォルトのリスナーを置き換えることができます

String XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes(
    const TestResult& result) { 
    Message attributes; 
    for (int i = 0; i < result.test_property_count(); ++i) { 
    const TestProperty& property = result.GetTestProperty(i); 
    attributes << " " << property.key() << "=" 
     << "\"" << EscapeXmlAttribute(property.value()) << "\""; 
    } 
    return attributes.GetString(); 
} 

:XML出力用プリンタのようなtest_info.result()->GetTestProperty(i):あなたはEmptyTestEventListenerを実装し、方法PrettyUnitTestResultPrinter::OnTestEnd()in gtest.cc)を変更し、結果のプロパティを使用する必要がありますgoogle test sample

UnitTest& unit_test = *UnitTest::GetInstance(); 
if (terse_output) { 
    TestEventListeners& listeners = unit_test.listeners(); 
    delete listeners.Release(listeners.default_result_printer()); 
    listeners.Append(new TersePrinter); 
} 
int ret_val = RUN_ALL_TESTS(); 
11

デフォルトのテスト構成では、単にstderrに印刷するだけで動作します。

std::cerr << "[   ] random seed = " << random_seed << std::endl; 
+1

私は私の質問、および書き込み出力では、この方法がないことを言及しました通常の色付きの出力は含まれません。 –

+2

それは素晴らしいですが、叫んで表示されません。 – thang

+1

std :: coutは私のために働いていませんでしたが、std:cerrは – user501743

0

私はちょうどLinuxのでANSIカラーコードとstd::coutを使用しているが、私はコードが勝利10周年記念アップデート以降のWindowsで動作すると信じています。

std:cout << "\033[0;32m" << "[   ] " << "\033[0;0m" 
<< "random seed = " << random_seed << lend; 

またはヘッダーファイルと一部の#defineステートメントを作成してテストに含めるだけです。私はまた、少しだけ張り出すためにテキストをフォーマットするのが好きです。

#define ANSI_TXT_GRN "\033[0;32m" 
#define ANSI_TXT_MGT "\033[0;35m" //Magenta 
#define ANSI_TXT_DFT "\033[0;0m" //Console default 
#define GTEST_BOX "[  cout ] " 
#define COUT_GTEST ANSI_TXT_GRN << GTEST_BOX //You could add the Default 
#define COUT_GTEST_MGT COUT_GTEST << ANSI_TXT_MGT 

だから私のコードは次のようになります。

cout << COUT_GTEST_MGT << "random seed = " << random_seed << ANSI_TXT_DFT << endl; 
関連する問題