如何比较谷歌模拟中的特殊字段?

时间:2015-01-28 13:53:49

标签: 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(*A, some_method(mes1), compare(Mes.a));//in this case google mock would compare only field "a" from Mes.

1 个答案:

答案 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));