假设您有一个类似下面的模板类,它继承了很多其他类。
template<typename T>
class Generic : public T
{
//implementation
}
不允许修改课程Generic
。为了解决这个问题,我给这个类写了一个包装器,它继承了一个特定类型的Generic
类。在这个类中,我模拟了类A
class Wrapper: public Generic<A>
{
MOCK_METHOD2(methodFromA,void(int a,int b));
}
然后我写了一个看起来像这样的测试。问题是我在调用EXPECT_CALL
时出现分段错误。从类A
调用其他方法可以正常工作。
TEST(classA, TC0)
{
std::shared_ptr<Wrapper> wrapper = std::dynamic_pointer_cast<Wrapper>(functionReturnPointerToA())
if(wrapper)
{
EXPECT_EQ(1,methodFromAwhichReturns1()); //it works
EXPECT_CALL(*wrapper,methodFromA(_,_); //segmentation fault
}
}
我也尝试过模板专业化,但由于MOCK_METHOD是一个预处理器指令,所以它似乎不起作用
template <> inline Wrapper<A>::MOCK_METHOD2(methodFromA,void(int a,int b));