我有类要模拟,但它没有默认构造函数。我无法更改源代码,所以有什么方法可以使用 Gmock 模拟参数化构造函数
最佳答案
是的。只需让 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);
};
与我在评论中所说的相反,不幸的是,我们确实需要处理所有的助手。然而,在这种情况下这并不太痛苦,因为我们不需要它们的任何功能。我们构建简单的空“插件”类:
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
。
关于c++ - 使用 Gmock 模拟参数化构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17465371/