【发布时间】:2017-09-08 20:35:10
【问题描述】:
我想将 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 一起使用的模板类,但它们没有任何构造函数参数。
有什么想法吗?
【问题讨论】:
-
我也面临的问题是构造函数的参数是非常量引用。我建议更新标题以表明问题是非常量引用参数。这将帮助搜索此问题的人更轻松地找到有用的答案。感谢您提出这个问题。
标签: c++ unit-testing googletest gmock