链模板继承中的Mock基类方法

时间:2018-01-31 21:04:35

标签: c++ inheritance googletest gmock

假设您有一个类似下面的模板类,它继承了很多其他类。

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

0 个答案:

没有答案