基本的にこのように機能する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
ここで、テストが失敗した場合にコンテンツをファイルに保存したいと思いますが、まだエレガントなソリューションはありません。
最初のアプローチ:比較結果を返すようにします。compareMyData
ASSERT_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
して通知を受け取ることができることはわかっていますが、それではファイルに書き込みたいデータが得られず、必要な場所から「遠く離れています」。ここで私の質問は次のとおりです。テストが失敗した場合にテストの最後にコードを実行する方法はありますか (例: 例外をキャッチしますか?)。
より一般的に質問するには、これをどのように解決しますか?