c – 在GTest中检查EXPECT_ *宏的结果或在ASSERT_ *失败时运行代码

我用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可能就是你想要的.
(我已经很晚了,但有同样的问题.)

点赞