struct obj
{
int a;
string str;
string str2;
bool operator==(const obj& o) const
{
if(a == o.a && str == o.str && str2 == o.str2) return true;
return false;
}
}
然后在一个函数类中,它使用struct对象作为输入参数:
bool functionNeedsToBeMocked(obj& input)
{
//do something
}
现在我想做的是
EXPECT_CALL(*mockedPointer, functionNeedsToBeMocked( /* if input.a == 1 && input.str == "test" && input.str2.contains("first")*/ )).Times(1).WillOnce(Return(true));
输入值为
inputFirst.a = 1;
inputFirst.str = "test";
inputFirst.str2 = "something first";
我希望inputFirst可以与我的EXPECT_CALL匹配。
我如何使用EXPECT_CALL匹配器来做到这一点呢?
我确实看到了
EXPECT_CALL(foo, DoThat(Not(HasSubstr("blah")),
NULL));
但是我不知道如何为一个结构参数做HasSubStr。
1条答案
按热度按时间k3bvogb11#
您可以为
obj
结构实现自己的匹配器。当您键入:
那么gmock将使用默认的匹配器
Eq
,使用some_obj
作为它的预期参数,使用实际的functionNeedsToBeMocked
作为匹配器中的arg
。Eq
匹配器将默认为预期对象和实际对象调用bool operator==
:但是,如果您不想使用
bool operator==
,可以编写一个自定义匹配器(删除Times(1)
,因为它也是默认匹配器):有一种可能性,可以使用
Field
匹配器和内置匹配器(如HasString
)编写一个自定义匹配器,但让我们“把它作为一个练习留给读者”:P更新:完整的
Field
匹配器代码: