web-dev-qa-db-ja.com

Google Testで追加の出力を印刷する

googletest C++テストフレームワーク を使用しています。通常、テスト実行のテキスト出力は次のようになります。

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

同じ形式でいくつかの追加データを出力したい、例えば:

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

Googletestドキュメントで Logging Additional Information を見つけましたが、標準のコンソール出力ではなく、XML出力に構造化データのみを送信しているようです。

この形式のテキストを出力する単体テスト内で呼び出すことができるgoogletest関数はありますか?手動でデータをcoutに送信することはできますが、通常の色付きの出力が含まれていないため、13個のスペースなどを印刷して明示的にインデントする必要があります。

44
Greg Hewgill

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

std::cerr << "[          ] random seed = " << random_seed << std::endl;
19
Martin Nowak

デフォルトのプリンターPrettyUnitTestResultPrinterのラッパーを作成して、テストプロパティも印刷できます。 listeners.default_result_printer()を使用してデフォルトのプリンターを取得できます(以下を参照)。 EmptyTestEventListenerを実装し、メソッドPrettyUnitTestResultPrinter::OnTestEnd()gtest.cc )を変更し、結果プロパティを使用する必要があります:test_info.result()->GetTestProperty(i) XML出力用のプリンター:

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();
}

その後、 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();
12
kossmoboleat

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

世話をする。

1
Captain Charmi

使用したところstd::coutlinuxのANSIカラーコードを使用していますが、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;
0
Lee