C++ 比较googlemock中指针的共容器

C++ 比较googlemock中指针的共容器,c++,stl,containers,googletest,googlemock,C++,Stl,Containers,Googletest,Googlemock,我需要使用以下方法测试一个类(假设它被称为调用方): void Caller::callMe(map<string, string> argument); void Executor::addVector(vector< shared_ptr<AbstractClass> > aVector); 我想测试一下,当调用Caller::callMe()时,它使用map参数创建一个ConcreteClass对象(一个AbstractClass接口的实现),创建一

我需要使用以下方法测试一个类(假设它被称为
调用方
):

void Caller::callMe(map<string, string> argument);
void Executor::addVector(vector< shared_ptr<AbstractClass> > aVector);
我想测试一下,当调用
Caller::callMe()
时,它使用
map
参数创建一个
ConcreteClass
对象(一个
AbstractClass
接口的实现),创建一个
vector
对象,并将is传递给
Executor::addVector()

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

MOCK_METHOD1( addVector, void(vector<shared_ptr<AbstractClass> >) );

因为
shared\u ptr
项将不同,我实际上需要比较共享\u ptr项指向的值,还需要处理从
AbstractClass
ConcreteClass
的转换

我读到过,可以使用
Pointee()
[1]在googlemock中比较指向的值,也可以使用
SafeMatcherCast()
[2]进行类型转换,但我很难让整个过程正常工作

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

谢谢大家!

[1]


[2]

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

class ConcreteClass : public AbstractClass {
public:
    unsigned value;
};
您可以编写一个自定义匹配器,为您处理下行广播:

MATCHER_P(DownCastClassHasValue, value, "") {
    return reinterpret_cast<const ConcreteClass*>(&arg)->value == value;
}

&c。这种期望并不完美,但我认为它会满足你的要求。

看,如果这篇文章有助于解决你的问题:谢谢,但这似乎并不能解决我的问题,或者至少我看不出如何将它应用到我的情况中。事实上,我意识到我需要更具体一些,所以我编辑了我的问题,添加了更多的细节。谢谢,这样做了:)
class ConcreteClass : public AbstractClass {
public:
    unsigned value;
};
MATCHER_P(DownCastClassHasValue, value, "") {
    return reinterpret_cast<const ConcreteClass*>(&arg)->value == value;
}
EXPECT_CALL( *mockExecutor, addVector(AllOf(
        Contains(Pointee(DownCastClassHasValue(1))),
        Contains(Pointee(DownCastClassHasValue(2))))));