NiceMock是一个Mock,它有另一个Mock作为构造函数参数

时间:2017-09-08 20:35:10

标签: c++ unit-testing googletest gmock

我想使用模拟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工作,但它们没有任何构造函数参数。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

ClassB构造函数中的参数是对ClassA的非const引用,NiceMock中不允许这样做。根据{{​​3}},其中一个限制是:

  

base mock(MockFoo)的构造函数不能有非const引用传递的参数

要使其工作,请改为传递const引用

ClassB(const ClassA & a) { }

或传递指向ClassA

的指针
ClassB(ClassA * a) { }