当前位置: 首页 > 知识库问答 >
问题:

c依赖注入测试类系统调用的类

龚同
2023-03-14

我试图使用模板依赖注入来测试一个使用C系统调用在文件描述符上操作的C类。ideia是有一个抽象类和一个实例来包装系统调用,如read()、写()等。然后我用一个模拟来测试我的目标类。抽象类和系统调用看起来像:(为了清楚起见,我准备省略参数)

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

后来,我在课堂上注入奥斯卡,我想使用它:

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

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

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

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

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

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

谢啦

共有1个答案

吕晟睿
2023-03-14

我建议您将GetMember奥斯卡()重命名为只是get奥斯卡()

这似乎使它能够与通用模板一起使用,通用模板的模板类需要实现一个getOscar all()方法,并且您可以使用FD实例化该模板

 类似资料:
  • NEI 目前已经发布了接口测试的功能,以解决一些接口具有依赖关系的测试场景。 依赖测试入口 在接口测试的接口测试和测试集列表中新增了一个分支:依赖测试集。 依赖测试集下可以查看创建的依赖测试集,也可以新增。 依赖测试流程 新增的依赖测试集,其初始如下图所示: 只有孤单的一层,点选 +能够新增接口。 如下图新增了两个接口 A 和 B 依赖测试集依赖规范说明 依赖测试集其依赖关系按层来组织,以接口层开

  • 我使用泛型使代码可重用,并利用依赖项注入。 我有两个接口:DataParserImplementation和ObjectImplementation。我有实现每个的类:SalesRepbyId实现DataParserImpl(它将数据解析为对象并将这些对象放入集合)。SalesRep实现Objectimpl(它是特定数据集的对象)。 我试图得到它,这样我就可以选择在我的SalesRepbyId类中

  • 我正在使用垃圾,模拟和模拟MVC来测试网络应用程序的工作。我正在与一个我无法弄清楚的注入的依赖关系作斗争。我的网络应用程序结构如下。 和服务级别 我需要测试此控制器的搜索方法,但是service2当前不活动,因此必须模拟对它的调用。我可以模拟service2,但不知道如何在控制器的mockMVC实例中注入service2的模拟。据我所知,mockito中的@InjectMocks只注入一层深度的m

  • 在React中,想做依赖注入(Dependency Injection)其实相当简单。请看下面这个例子: // Title.jsx export default function Title(props) { return <h1>{ props.title }</h1>; } // Header.jsx import Title from './Title.jsx'; export defa

  • 依赖注入 Dependency Injection is a strong mechanism, which helps us easily manage dependencies of our classes. It is very popular pattern in strongly typed languages like C# and Java. 依赖注入是一个很强大的机制,该机制可以帮

  • 简介 Hyperf 默认采用 hyperf/di 作为框架的依赖注入管理容器,尽管从设计上我们允许您更换其它的依赖注入管理容器,但我们强烈不建议您更换该组件。 hyperf/di 是一个强大的用于管理类的依赖关系并完成自动注入的组件,与传统依赖注入容器的区别在于更符合长生命周期的应用使用、提供了 注解及注解注入 的支持、提供了无比强大的 AOP 面向切面编程 能力,这些能力及易用性作为 Hyper