我用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并在测试失败时得到通知,但是这不会给我想要写入文件的数据,它离我想要的地方“很远”有.所以我的问题是:如果测试失败(例如捕获异常?),是否有办法在测试结束时运行代码?
问更多一般:你会如何解决这个问题?
最佳答案 它说,与VladLosev联系的
On the advanced guide
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可能就是你想要的.
(我已经很晚了,但有同样的问题.)