gpt4 book ai didi

c++ - 使用 Gmock 模拟参数化构造函数

转载 作者:可可西里 更新时间:2023-11-01 18:06:04 40 4
gpt4 key购买 nike

我有类要模拟,但它没有默认构造函数。我无法更改源代码,所以有什么方法可以使用 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/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com