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

C++ 如何比较google mock中的特殊字段?,c++,testing,googletest,googlemock,C++,Testing,Googletest,Googlemock,我的问题与谷歌测试有关。我想问一下,在测试用例中引入“EXPECT_CALL(*A,some_method(mes1));”时,是否有可能比较包含的字段 在mes1班 struct Mes { int a; }; //short section of test case: Mes mes1 = Mes(); EXPECT_CALL(*A, some_method(mes1)); 我想问一下,在google mock中是否有可能比较Mes中包含的特殊字段。比如: EXPECT_CALL

我的问题与谷歌测试有关。我想问一下,在测试用例中引入“EXPECT_CALL(*A,some_method(mes1));”时,是否有可能比较包含的字段 在mes1班

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));
// Fails unless mes.a is equal to 42.
EXPECT_CALL(*A, some_method(MesFieldEq(42));
请注意,如果
some_method
返回一个值,您可能还需要提供一个操作

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

MATCHER_P(MesFieldEq, val, "")
{
    return (arg.a == val);
}
然后在您的期望中使用它,如下所示:

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