17

我有要模拟的类,但它没有默认构造函数。我无法更改源代码,所以有什么方法可以使用 Gmock 模拟参数化构造函数

4

1 回答 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 回答