gtest-使用EXPECT_EQ报告用于循环的索引变量

Tal*_*anL 4 c++ unit-testing googletest

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

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)));
}
Run Code Online (Sandbox Code Playgroud)

这样做的好处在于,对于不匹配项,它报告比较的值,例如5!= 7,但不报告索引变量“ x”。有什么方法可以在检测到不匹配时轻松输出索引变量?

小智 6

https://github.com/google/googletest/blob/master/googletest/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;
Run Code Online (Sandbox Code Playgroud)