gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:10:59 30 4
gpt4 key购买 nike

我用 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 并在测试失败时收到通知,但这并没有给我想要写入文件的数据,而且它“很远” “从我想要的地方。所以我的问题是:如果测试失败(例如捕获异常?),有没有办法在测试结束时运行代码?


更一般地问:你会如何解决这个问题?

最佳答案

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 可能是您想要的。(我来晚了,但有同样的问题。)

关于c++ - 检查 GTest 中 EXPECT_* 宏的结果或在 ASSERT_* 失败时运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18735891/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com