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