我有问题与谷歌测试有关。我想询问是否在诱导" 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.
答案 0 :(得分:1)
这取决于您想要对比较结果做什么。如果您只是想查询字段的值,您可以简单地定义一个函数来执行某些操作:
// 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
返回值,您可能还需要提供Return
操作。
或者,如果您希望测试失败,如果该字段不是某个特定值,则需要编写自定义匹配器:
MATCHER_P(MesFieldEq, val, "")
{
return (arg.a == val);
}
然后按照以下方式使用它:
// Fails unless mes.a is equal to 42.
EXPECT_CALL(*A, some_method(MesFieldEq(42));