gpt4 book ai didi

c++依赖注入(inject)来测试类系统调用的类

转载 作者:太空狗 更新时间:2023-10-29 23:15:24 25 4
gpt4 key购买 nike

我正在尝试使用模板依赖注入(inject)来测试使用 C 系统调用来操作文件描述符的 C++ 类。 ideia 是有一个抽象类和一个实例来包装系统调用,如 read()、write() 等。然后我使用模拟来测试我的目标类。抽象类和系统调用如下所示:(为了清楚起见,我将省略参数)

class OSCall{
read()=0;
write()=0
};
class DefaultOSCall : public OSCall{
read(){...}
write(){...}
}

稍后我将 OSCall 注入(inject)到我想使用它的类中:

template<typename OSCall>
class FD{
public:
OSCall osCall_;
OSCall &GetOSCall(){return osCall_;}

read(){osCall_.read()}
write(){osCall_.write()}
}

现在,如果我想使用模拟来测试我的 FD 类,我只需要在模板参数中传递我的模拟并使用 GetOsCall 获取模拟实例。

假设我想将 FD 用作另一个类的成员:

template<typename OSCall>
class User{
public:
DoSomething(){fd_.read();.......}
OSCall &GetMemberOSCall(){return fd_.GetOSCall()}
private:
FD<OSCall> fd_;
}

如果我想用模拟测试用户,我可以使用 GetMemberOSCall 获取 OSCall 实例,它有效,但这是最好的方法之一吗?最后我想向类成员注入(inject)一个模拟,并期望成员模拟的返回值。我希望我说清楚了。

谢谢

最佳答案

我建议您重命名 GetMemberOSCall()正如getOSCall() .

这似乎使它能够与通用模板结合使用,其模板类需要实现 getOSCall()方法,您将能够使用 FD<OScall> 实例化此模板, 或 User<OScall> .似乎是更灵活的方法。

关于c++依赖注入(inject)来测试类系统调用的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29379884/

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