范围:使用 Google Test 和 OpenCV。
我想测试我的 Vec3f
是否等于另一个 Vec3f
。 Vec3f
是 OpenCV 中一个维度为 3 且类型为 float 的向量。 == 运算符已定义,因此 EXPECT_EQ(Vec3f(), Vec3f())
有效。
但是因为它们是 float ,所以我想使用 EXPECT_NEAR(float a, float b, float delta)
宏。我该怎么做才能像 EXPECT_NEAR(vec_a, vec_b, float delta)
那样使用它?
目前我正在遍历向量的每个元素并在那里执行 EXPECT_NEAR。
这可能是相关的:Convenient method in GoogleTest for a double comparison of not equal?
最佳答案
您可以使用 Pointwise()来自 Google Mock 的匹配器。将它与检查两个参数是否接近的自定义匹配器相结合:
#include <tr1/tuple>
#include <gmock/gmock.h>
using std::tr1::get;
using testing::Pointwise;
MATCHER_P(NearWithPrecision, precision, "") {
return abs(get<0>(arg) - get<1>(arg)) < precision;
}
TEST(FooTest, ArraysNear) {
EXPECT_THAT(result_array, Pointwise(NearWithPrecision(0.1), expected_array));
}
关于unit-testing - Google Test 中的自定义 EXPECT_NEAR 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7120742/