gtest - 报告带有EXPECT_EQ的循环的索引变量

gtest - Report index variable for loop with EXPECT_EQ

本文关键字:EQ 循环 索引 变量 EXPECT 报告 gtest      更新时间:2023-10-16

我正在使用gtest,但我是gtest的新手。 我想比较复杂数据结构的两个 std::向量中的值。 我想做这样的事情:

ASSERT_EQ(a.size(), b.size());
for (int x = 0; x < a.size(); x++) {
EXPECT_EQ(
sqrt(pow(a.real[x], 2) + pow(a.imag[x], 2)),
sqrt(pow(b.real[x], 2) + pow(b.imag[x], 2)));
}

这很好,因为对于不匹配,它会报告比较的值,例如 5 != 7,但它不报告索引变量"x"。 有没有办法在检测到不匹配时轻松输出索引变量?

从 https://github.com/google/googletest/blob/main/docs/primer.md:

若要提供自定义失败消息,只需使用<<运算符或一系列此类运算符将其流式传输到宏中。

因此,如果你想输出你的指数是期望相等的,你可以做这样的事情:

EXPECT_EQ(
sqrt(pow(a.real[x], 2) + pow(a.imag[x], 2)),
sqrt(pow(b.real[x], 2) + pow(b.imag[x], 2))) << "x is : " << x << std::endl;
可以使用

可以使用SCOPED_TRACE(https://github.com/google/googletest/blob/main/docs/advanced.md#adding-traces-to-assertions(,例如:

for (int x = 0; x < a.size(); x++) {
SCOPED_TRACE("x = " + std::to_string(x));
EXPECT_EQ(
...

当有多个检查时,它特别有用:

for (int x = 0; x < a.size(); x++) {
SCOPED_TRACE("x = " + std::to_string(x));
EXPECT_EQ(...
EXPECT_EQ(...