我想使用模拟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上,ClassA是ClassB构造函数的参数类型。在像NiceMock<MockClassA> a
这样的NiceMock中包装ClassA没有任何帮助,我只是得到了类似的错误:cannot convert argument 1 from 'const testing::NiceMock<MockClassA>' to 'ClassA &'
我有其他模板化的类,我正在使用NiceMock工作,但它们没有任何构造函数参数。
有什么想法吗?
答案 0 :(得分:3)
ClassB
构造函数中的参数是对ClassA
的非const引用,NiceMock
中不允许这样做。根据{{3}},其中一个限制是:
base mock(MockFoo)的构造函数不能有非const引用传递的参数
要使其工作,请改为传递const引用
ClassB(const ClassA & a) { }
或传递指向ClassA
ClassB(ClassA * a) { }