4

基本的にこのように機能するGTestでC++テストを作成しました

MyData data1 = runTest(inputData);
MyData data2 = loadRegressionData();

compareMyData(data1,data2);

void compareMyData(MyData const& data1, MyData const& data2)
{
  ASSERT_EQ(data1.count, data2.count);
  //pseudo:
  foreach element in data1/data2:
    EXPECT_EQ(data1.items[i], data2.items[i]);
}

data1ここで、テストが失敗した場合にコンテンツをファイルに保存したいと思いますが、まだエレガントなソリューションはありません。


最初のアプローチ:比較結果を返すようにしますcompareMyDataASSERT_EQこれは、致命的なものでは機能しません。書き込みif (!EXPECT_EQ(...))はコンパイルされないので、私が見つけた唯一の方法は

bool compareMyData(MyData const& data1, MyData const& data2)
{
  EXPECT_EQ(data1.count, data2.count);
  if (data1.count != data2.count)
    return false;
  //pseudo:
  foreach element in data1/data2:
  {
    EXPECT_EQ(data1.items[i], data2.items[i]);  
    if (data1.items[i]!= data2.items[i])
      return false;
  }
}

あまりエレガントではありません:-(


2 番目のアイデア:テストが失敗したときにコードを実行する

テストが失敗した場合に実装::testing::EmptyTestEventListenerして通知を受け取ることができることはわかっていますが、それではファイルに書き込みたいデータが得られず、必要な場所から「遠く離れています」。ここで私の質問は次のとおりです。テストが失敗した場合にテストの最後にコードを実行する方法はありますか (例: 例外をキャッチしますか?)。


より一般的に質問するには、これをどのように解決しますか?

4

2 に答える 2

2

VladLosev がリンクした高度なガイドには、次のように書かれています。

Similarly, HasNonfatalFailure() returns true if the current test has at least one non-fatal failure, and HasFailure() returns true if the current test has at least one failure of either kind.

したがって、電話HasNonfatalFailureが必要な場合があります。(かなり遅れましたが、同じ質問がありました。)

于 2014-10-26T13:28:41.300 に答える