首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较googlemock中的指针

比较googlemock中的指针
EN

Stack Overflow用户
提问于 2015-07-20 10:13:23
回答 1查看 1.5K关注 0票数 1

我需要用这个方法测试一个类(假设它名为Caller):

代码语言:javascript
复制
void Caller::callMe(map<string, string> argument);

该类包含指向另一个类(假设为Executor)的指针,该类具有以下方法:

代码语言:javascript
复制
void Executor::addVector(vector< shared_ptr<AbstractClass> > aVector);

我想测试,在调用Caller::callMe()时,它使用map<string>参数创建ConcreteClass对象( AbstractClass接口的实现),创建vector< shared_ptr<ConcreteClass> >对象并将其传递给Executor::addVector()

为此,我创建了一个MockExecutor,如:

代码语言:javascript
复制
MOCK_METHOD1( addVector, void(vector<shared_ptr<AbstractClass> >) );

并将其传递给我的Caller实例。

Caller::callMe()方法从我传递的映射派生vector< shared_ptr<ConcreteClass> >,即在调用Caller::callMe()之前不知道向量的值。

这意味着,为了测试向量中的ConcreteClass项是否与预期值匹配,我不能这样做:

代码语言:javascript
复制
vector< shared_ptr<ConcreteClass> > expectedVector;
for(size_t i = 0; i < expectedLength; ++i)
{ /* initialise vector with expected values */ }

EXPECT_CALL( *mockExecutor, addVector(expectedVector) );

代码语言:javascript
复制
EXPECT_CALL( *mockExecutor, addVector(ElementsAre(..., ...) );

因为shared_ptr项将是不同的,我实际上需要比较由shared_ptr项指向的值,还需要处理从AbstractClassConcreteClass的转换。

我已经读到,可以使用Pointee() 1比较googlemock中的指向值,并且可以使用SafeMatcherCast() 2进行类型转换,但我很难使整个工作正常进行。

我怎么能用googlemock写这样的测试呢?或者,使用自定义匹配器可以实现这一点吗?

谢谢!

1

2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-21 22:26:01

可能有几种不同的方法可以做到这一点,但我首先想到的是使用自定义匹配器。假设上面的ConcreteClass如下所示:

代码语言:javascript
复制
class ConcreteClass : public AbstractClass {
public:
    unsigned value;
};

您可以编写一个自定义匹配程序,它为您处理下传:

代码语言:javascript
复制
MATCHER_P(DownCastClassHasValue, value, "") {
    return reinterpret_cast<const ConcreteClass*>(&arg)->value == value;
}

这将用于:

代码语言:javascript
复制
EXPECT_CALL( *mockExecutor, addVector(AllOf(
        Contains(Pointee(DownCastClassHasValue(1))),
        Contains(Pointee(DownCastClassHasValue(2))))));

这个期望不是很好,但我想它能做你想做的事。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31513885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档