gtest - 使用EXPECT_EQ

时间:2018-06-13 18:23:02

标签: 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)));
}

这很好,因为不匹配会报告比较的值,例如: 5!= 7,但它不报告索引变量“x”。有没有什么方法可以在检测到不匹配时轻松输出索引变量?

1 个答案:

答案 0 :(得分:4)

来自https://github.com/google/googletest/blob/master/googletest/docs/primer.md

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

因此,如果您想输出索引所期望的值,那么您可以执行以下操作:

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;