如何比较 google mock 中的特殊字段?

How to compare special fields in google mock?

我有关于 google 测试的问题。我想问一下在测试用例中引入 "EXPECT_CALL(*A, some_method(mes1));" 时是否可以比较包含的字段 在 mes1 class.

struct Mes
{
    int a;
};

//short section of test case:
Mes mes1 = Mes();
EXPECT_CALL(*A, some_method(mes1));

我想问一下 google mock 是否可以比较 Mes 中包含的特殊字段。类似于:

EXPECT_CALL(*A, some_method(mes1), compare(Mes.a));//in this case google mock would compare only field "a" from Mes.

这取决于你想对比较结果做什么。如果你只是想查询字段的值,你可以简单地定义一个函数来做一些事情:

// Note: The signature of someFunction needs to match some_method.
void someFunction(const Mes& mes)
{
    // Do something with mes.a
}

然后按如下方式设置您的期望值:

EXPECT_CALL(*A, some_method(mes1)).WillOnce(Invoke(someFunction));

请注意,如果 some_method returns 值,您可能还必须提供 Return 操作。

或者,如果您希望在字段不是某个特定值时测试失败,则需要编写自定义匹配器:

MATCHER_P(MesFieldEq, val, "")
{
    return (arg.a == val);
}

然后按照你的期望使用它:

// Fails unless mes.a is equal to 42.
EXPECT_CALL(*A, some_method(MesFieldEq(42));