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

Dagger 2中的测试模块和注入

方宏才
2023-03-14
    null
@Singleton
@Component(modules = {LoginModule.class, HTTPModule.class})
public interface LoginComponent {

}

@Module(includes = {HTTPModule.class})
public class LoginModule {

    @Provides
    @Singleton
    public MyThing provideMyThing(OkHttpClient client) {
       // Do things with it
    }
}

@Module
public class HTTPModule {

    @Provides
    @Singleton
    public OkHttpClient provideOkHttpClient(){
        // Return the OkHttpClient
    }
}

如果有人能给我指明正确的方向,我将不胜感激。

提前道谢!

共有1个答案

鲍钊
2023-03-14

您使用依赖注入的方式仍然保持代码的紧密耦合。一般来说,您希望您的依赖项是接口,而不是实际的类。这使您的代码保持良好和松散,易于阅读、修改和维护。

将网络操作隐藏在接口后面,允许您在需要时修改网络实现。在您的情况下,这可以用于测试,但它也允许您在不更改任何其他代码的情况下,在将来想要或需要时切换出网络库。

试试这样的方法:

@Module
public class HTTPModule {

    @Provides
    @Singleton
    public NetworkProvider provideNetworkProvider(){
        // Return the Network provider
    }
}

网络抽象层:

public interface NetworkProvider {
    // Methods to send requests and receive async responses
}

OkHttp实现:

public class OkHttpNetworkProvider implements NetworkProvider {
   // Implement NetworkProvider. This is the only class that
   // knows about OkHttp and its components
}
 类似资料:
  • 这是我的项目的结构。 父级不包含代码。 模块child1是一个Spring引导应用程序。 模块child2和child3是JAR库。 Child1依赖于child2和Child3 特别是: child1中的测试被注释为SpringBootTest,但child2和child3最好不依赖于spring boot(仅用于autowiring的spring框架) 我希望能够在子模块中的配置类上使用@va

  • 2.6. 测试模块 所有的 Python 模块都是对象并且有几个有用的属性。 您可以使用这些属性方便地测试您所书写的模块。 下面是一个使用 if __name__ 的技巧。 if __name__ == "__main__": 在继续学习新东西之前, 有几点重要的观察结果。 首先, if 表达式无需使用圆括号括起来。 其次, if 语句以冒号结束, 随后跟随的是 缩进代码。 与 C 一样, Py

  • 让我们创建一个名为的新模块,并在那里定义CounterService。 app/shared/shared.module.ts 现在我们将引入 SharedModule 到AppModule 和中。 app/lazy/lazy.module.ts 使用此配置,两个模块的组件都可以访问CounterService。 我们将以完全相同的方式在EagerComponent和LazyComponent中使

  • 问题内容: 每当我想测试使用资源注入的类时,我最终都会包含一个仅在测试中使用的构造函数: 还有另一种模拟资源注入的方式,或者这是遵循的正确模式吗? 问题答案: 您可以使用简单的光泽效果,它可以模拟EJB注入系统。 另一种方法是在测试中使用反射来设置字段,我有时使用类似这样的内容:

  • 我很困惑于嘲笑如何对实现进行单元测试。问题是我想嘲笑不同的预期行为。 有没有办法做到这一点?由于导入只能在文件的顶部,并且为了能够模拟某些内容,必须在导入之前声明它。我也试图传递一个本地函数,这样我就可以覆盖行为,但jest抱怨你不允许传递任何本地的东西。 在内部,可以想象使用

  • 我最终做的是在测试设置过程中替换应用程序级图(MockRestAdapter就是在其中创建的