我有要模拟的类,但它没有默认构造函数。我无法更改源代码,所以有什么方法可以使用 Gmock 模拟参数化构造函数
问问题
24445 次
1 回答
34
就在这里。只需让您的 Mock 的构造函数使用正确的参数调用模拟类的构造函数:
class base_class {
public:
base_class(int, int) {}
virtual int foo(int);
};
class base_mock : public base_class {
public:
base_mock() : base_class(23, 42) {}
MOCK_METHOD1(foo, int(int));
};
甚至
class base_mock : public base_class {
public:
base_mock(int a, int b) : base_class(a, b) {}
MOCK_METHOD1(foo, int(int));
};
根据@Blackhex 的请求进行编辑
假设我们的模拟类的构造函数引用了它需要的其他类:
class helper2 {};
class helper {
public:
helper(helper2&) {}
/* Whatever */
};
class base2 {
public:
base2(helper &h) {}
virtual int foo(int);
};
与我在评论中所说的相反,不幸的是,我们确实需要处理所有帮助者。但是,在这种情况下这并不太痛苦,因为我们不需要它们的任何功能。我们构建简单的、空的“plug”类:
struct helper2_plug: public helper2 {};
struct helper_plug : public helper {
helper_plug() : helper(helper2_plug()) {}
};
然后,我们可以构建模拟:
class base2_mock : public base2 {
public:
base2_mock() : base2(helper_plug()) {}
MOCK_METHOD1(foo, int(int));
};
我struct
在我的插头中使用只是为了避免public
.
于 2013-07-04T08:51:38.003 回答