NiceMock 一个将另一个 Mock 作为构造函数参数的 Mock

NiceMock a Mock that has another Mock as a constructor parameter

我想将 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<MockClassA> a 这样的 NiceMock 中没有帮助,我只是得到一个类似的错误:cannot convert argument 1 from 'const testing::NiceMock<MockClassA>' to 'ClassA &'

我还有其他模板 类 可以与 NiceMock 一起使用,但它们没有任何构造函数参数。

有什么想法吗?

ClassB 构造函数中的参数是对 ClassA 的非常量引用,这在 NiceMock 中是不允许的。根据documentation,限制之一是:

The constructors of the base mock (MockFoo) cannot have arguments passed by non-const reference

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

ClassB(const ClassA & a) { }

或传递一个指向ClassA

的指针
ClassB(ClassA * a) { }