NiceMock Mock, который имеет другой Mock в качестве параметра конструктора

Я хочу использовать макет с NiceMock. У Mock есть один конструктор, который принимает другой Mock в качестве аргумента. Это небольшой пример кода, который у меня работает

class ClassA
{
    ClassA() { }
};

template <class T>
class ClassB>
{
    ClassB(ClassA & a) { } // constructor, no default constructor for this class
};

class ClassC
{
    ClassC() { }
};

class MyTest : public Test
{
    MockClassA a;
    MockClassB<ClassC> * b = NULL;

    SetUp()
    {
        b = new MockClassB<ClassC>(a);
    }
    ...
};

Это прекрасно работает, но если я попытаюсь использовать MockClassB с NiceMock, как это

MockClassA a;
NiceMock<MockClassB<ClassC>> * b = NULL;

SetUp()
{
    b = new NiceMock<MockClassB<ClassC>>(a);
}

Я получаю сообщение об ошибке компиляции cannot convert argument 1 from 'const MockClassA' to 'ClassA &', Обратите внимание, что ошибка в ClassA, который является типом аргумента конструктора для ClassB. Это не помогает обернуть ClassA в NiceMock как NiceMock<MockClassA> aЯ просто получаю похожую ошибку: cannot convert argument 1 from 'const testing::NiceMock<MockClassA>' to 'ClassA &'

У меня есть другие шаблонные классы, которые я использую с NiceMock, но они не имеют параметров конструктора.

Есть идеи?

1 ответ

Решение

Аргумент в ClassB Конструктор является неконстантной ссылкой на ClassA, что не допускается в NiceMock, Согласно документации, одним из ограничений является:

Конструкторы базового макета (MockFoo) не могут иметь аргументы, передаваемые по неконстантной ссылке

Чтобы это работало, вместо этого передайте ссылку на const

ClassB(const ClassA & a) { }

или передать указатель на ClassA

ClassB(ClassA * a) { }
Другие вопросы по тегам