如何比较 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));
我有关于 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));