我用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
并在测试失败时得到通知,但是这不会给我想要写入文件的数据,它离我想要的地方“很远”它有。所以我的问题是:有没有办法在测试结束时运行代码如果失败(例如捕获异常?)。
要问更一般的问题:你会如何解决这个问题?
答案 0 :(得分:2)
On the advanced guide 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
可能就是你想要的。
(我已经很晚了,但也有同样的问题。)
答案 1 :(得分:0)
解决方法:
bool HasError = false;
FAIL() << (HasError = true);
if (HasError){
// do something
}
代替FAIL()可以是ASSERT_ .. EXPECT _...等。 (在输出中,您会看到“ true”,这是快捷方式的费用)。