Использование gmock для макета класса, который создает и экземпляр другого класса - PullRequest
0 голосов
/ 12 апреля 2020

Предположим, у меня есть такой класс:

class A
{
    public:
        A(struct param1, struct params2, struct param3)
        {
            inst1 = Create_B(param1);
            inst2 = Create_B(param2);
        }  

        int some_method(std::string st1, std::string st2, double d1, int s1);

   private:

        virtual classB* Create_B(struct param)
        {
            return new classB(param);
        }

    protected:
             classB *inst1;
             classB *inst2;
};

Я хотел бы протестировать класс А и макетировать класс В. Как бы я go сделал это?

Я создал макет для класса A:

class MockA : public A
{
public:
    MockA(struct c1, struct c2, struct c3) : A(c1, c2, c3) {};
    virtual ~A() {}
    MOCK_METHOD1(Create_B, B*(struct));
};

Но у меня проблемы с настройкой теста. Я не уверен, как настроить мой EXPECT_CALL, и когда я вызываю some_method, он должен вызвать метод с Class_B, не могу понять, как это проверить.

TEST_F(Test_Fixture, VerifyA)
{
    /* Initialize */
    MockA  obj(param1, param2, param3);   

}

1 Ответ

0 голосов
/ 12 апреля 2020

Есть два простых способа, если вы хотите сохранить структуру кода как есть.

  1. Вы можете сделать тестовый класс другом этого класса, а затем сделать его сбросить класс b переменные-члены, которые будут mocks

  2. Вы можете создать дочерний класс этого класса в своем тесте. Затем пусть дочерний класс устанавливает переменные-члены родительского класса b как mocks

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...