【发布时间】:2017-06-26 20:04:54
【问题描述】:
我喜欢为包含一些浮点值的结构编写匹配器:
struct Point3D
{
float x;
float y;
float z;
}
class Interface
{
virtual void SetPoint(Point3D point) = 0;
}
class MockInterface:
public Interface
{
MOCK_METHOD1(SetPoint, void(Point3D point));
}
MATCHER_P(Point3DEq, point, "Comparison of a Point3D")
{
return point.x == arg.x && point.y == arg.y && point.z == arg.z;
}
TEST(Point3DComparison, TestIfPoint3DAreEqual)
{
MockInterface interfaceFake;
Point setPoint = { 1.0, 1.0, 1.0 }
EXPECT_CALL(interfaceFake, SetPoint(Point3DEq(setPoint)).WillOnce(Return());
}
我不喜欢这个 Matcher,因为他不尊重良好的浮动比较。我想使用 gmock 或 gtest 的浮动比较来编写一个匹配器。它应该看起来和那个相似。
MATCHER_P(Point3DEq, point, "Comparison of a Point3D")
{
return EXPECT_THAT(point.x, FloatEq(arg.x) && EXPECT_THAT(point.y, FloatEq(arg.y) && EXPECT_THAT(point.z, FloatEq(arg.z);
}
问题是 EXPECT_THAT 没有返回任何布尔值。使用 gmock 和 gtest 的功能是否有一种干净的方法来做到这一点?
【问题讨论】:
标签: c++ unit-testing googletest gmock googlemock