Создание экземпляра конструктора базового класса gmock с другим экземпляром

В приведенном ниже примере я хотел бы имитировать класс TestB, поскольку класс TestA имеет внешнюю зависимость.

Пример кода:

*file : testA.h*
template <typename s>
class TestA : public class TestBase
{
.....
struct ConstructionToken
{
//`Code for construction token`
};
explicit TestA(ConstructionToken&& token) noexcept
        : TestBase(token.ID, token.Con)
.....
};

*file : testB.h*
class TestB : public class TestA
{
.....
TestB(ConstructionToken&& token)
: TestA<TestB>(std::move(token)){}
.....
};

*file : testC.h*
class TestC : public class TestB
{
.....
TestC(ConstructionToken&& token)
: TestB(std::move(token)){}
.....
};

Тестовый код:

*File : Dependency_test.cpp*
TEST_F(DependencyCheckTest, DependencyCase1)
{
.......
// auto token = preconstruct the instance.
TestC cObj(std::move(token));
}

Вопрос В объекте тестового кода, созданном для класса TestC.

  1. Есть ли способ смоделировать конструктор класса TestB? класс TestA имеет внешнюю зависимость, поэтому мне не нужно вызывать TestA.

Примечание. Помимо конструктора, я могу имитировать другие методы.


person Ashok Kumar    schedule 02.09.2020    source источник


Ответы (1)


Я не знаю, как опустить вызов ctor базового класса - ctors никогда не бывают виртуальными в C++, и, следовательно, вы не можете их переопределить.

В вашем случае я бы предложил сделать все классы инвертированными из чисто виртуального класса с ctor по умолчанию и виртуальным dtor по умолчанию, а все остальные методы чисто виртуальными, если это возможно. Это обеспечивает лучшее отвлечение и устраняет подобные проблемы.

person Quarra    schedule 02.09.2020