如何模拟用成员变量初始化的局部变量

时间:2019-06-20 10:34:31

标签: googletest gmock

我有两个类A类和SRD类(用于理解问题的示例类。实际类是不同的)。两个类都具有相同的Function(method1)和相同的参数。两者都不来自不同的类。

Class SRD是Class A的成员。ClassA中的函数为SRD创建一个新对象并调用method1()。它应该调用模拟功能。但它称为实际的实现方式

我为这两个类都编写了模拟类,并在两个类中都定义了模拟方法,并在TEST函数中编写了EXPECT_CALL

    class A{
        private:
            SRD* srd;

        public :
         bool  Method1();
         bool MethodX();
         SRD* getsrd() {return srd;}
    };

    bool A :: MethodX()
    {

        srd.Method1(); // Not Calling Mock Method - Calling Actual 
     //Implementation
    }

    bool A::Method1()
    {
        ....
    }

    class SRD{

    public:
       bool Method1();
    };

    class MockSRD : public SRD{
        MOCK_METHOD0(Method1, bool())
    };

    class MockA : public MockA{
        MOCK_METHOD0(Method1, bool())
    };


    bool SRD::Method1()
    {
        ....
    }

    class TestA : public A {};

    TEST_F(TestA, test1)
    {
        MockSRD srd;

        EXPECT_CALL(srd, Method1())
        .Times(testing::AnyNumber())
        .WillRepeatedly(Return(true));

        srd.Method1() //Working fine - Caling mock Method;
        MethodX()
    }

当我调用s1.Method1()时,它应该调用模拟方法。我该怎么办?

我不想更改生产代码。

1 个答案:

答案 0 :(得分:0)

感谢您抽出时间回答问题。 @克里斯·奥斯伦&@sklott

我忘记了将基类方法设置为Virtual。当我更改基类方法时