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) { }