Как смоделировать локальную переменную, инициализированную переменной-членом - PullRequest
0 голосов
/ 20 июня 2019

У меня есть два класса Class A и Class SRD (Примеры классов для понимания проблемы. Реальные классы разные).Оба класса имеют одну и ту же функцию (method1) с одинаковыми аргументами.Оба не являются производными от разных классов.

Класс SRD является членом класса А. Функция в классе А создает новый объект для SRD и вызывает method1().Это должно вызвать фиктивную функцию.но он вызывает фактическую реализацию

У меня есть написанные фиктивные классы для обоих классов, и я определил метод имитации в обоих классах и написал EXPECT_CALL в функции TEST

    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 голосов
/ 28 июня 2019

Спасибо, что нашли время ответить на вопрос. @Chris Oslen & @ sklott

Я забыл сделать метод базового класса для Virtual. Он отлично работал, когда я меняю методы базового класса

...