unit-testing - Google Test 中的自定义 EXPECT_NEAR 宏

标签 unit-testing macros opencv googletest

范围:使用 Google Test 和 OpenCV。

我想测试我的 Vec3f 是否等于另一个 Vec3fVec3f 是 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/

相关文章:

c# - ClassInitialize : no longer working in Visual Studio 2012 中生成的数据驱动测试

android - 如何用IDEA+Gradle+Android运行单元测试

unit-testing - 无论如何,我可以通过 `docker-compose`运行命令,例如实例化容器,运行命令,停止容器吗?

c++ - 如何检查 __PRETTY_FUNCTION__ 是否可以使用?

macros - Sublime Text 绑定(bind) : insert semicolon at eol and come back

ios - ELEVENWORDINLINE什么时候用呢?

python openCV debayer

python - 等效于 Tensorflow 中的 fillPoly

python - 从 numpy 数组转换为 PIL 图像 python 后图像颜色发生变化

spring - 使用@WebMvcTest 时如何排除使用 Spring 的 AutoConfiguration 添加的类?