我用 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
内容保存到一个文件 IFF 测试失败并且我还没有看到一个优雅的解决方案。
第一种方法:返回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;
}
}
不是很优雅:-(
第二个想法:测试失败时运行代码
我知道::testing::EmptyTestEventListener
如果测试失败,我可以实施并得到通知,但这并没有给我想要写入文件的数据,而且它离我想要的地方“很远”。所以我的问题是:如果测试失败(例如捕获异常?),有没有办法在测试结束时运行代码。
更笼统地问:你将如何解决这个问题?