我有一个使用Dagger 2进行依赖注入的Android应用。 我还在使用最新的gradle构建工具,该工具允许对单元测试和工具测试使用一个构建变体。 我在我的应用程序中使用Component,并且我想对此进行模拟以进行测试。 我正在测试的类不使用任何Android东西,因此它们只是常规的Java类。

在我的主代码中,我在扩展了2732014639205205843969类的类中定义了Component968,但是在单元测试中,我未使用2732014639205205843970。我尝试定义测试Module和2732014639205205843972,但Dagger无法生成Component。 也尝试使用我在应用程序中定义的Component,并在构建它时交换Module,但是应用程序的Component没有用于我的测试类的inject方法。 如何为测试提供Random的模拟实现?

这是一些示例代码:

应用:

public class PipeGameApplication extends Application {

private PipeGame pipeGame;

@Singleton

@Component(modules = PipeGameModule.class)

public interface PipeGame {

void inject(BoardFragment boardFragment);

void inject(ConveyorFragment conveyorFragment);

}

@Override

public void onCreate() {

super.onCreate();

pipeGame = DaggerPipeGameApplication_PipeGame.create();

}

public PipeGame component() {

return pipeGame;

}

}

模组:

@Module

public class PipeGameModule {

@Provides

@Singleton

Random provideRandom() {

return new Random();

}

}

测试的基类:

public class BaseModelTest {

PipeGameTest pipeGameTest;

@Singleton

@Component(modules = PipeGameTestModule.class)

public interface PipeGameTest {

void inject(BoardModelTest boardModelTest);

void inject(ConveyorModelTest conveyorModelTest);

}

@Before

public void setUp() {

pipeGameTest = DaggerBaseModelTest_PipeGameTest.create(); // Doesn't work

}

public PipeGameTest component() {

return pipeGameTest;

}

}

要么:

public class BaseModelTest {

PipeGameApplication.PipeGame pipeGameTest;

// This works if I make the test module extend

// the prod module, but it can't inject my test classes

@Before

public void setUp() {

pipeGameTest = DaggerPipeGameApplication_PipeGame.builder().pipeGameModule(new PipeGameModuleTest()).build();

}

public PipeGameApplication.PipeGame component() {

return pipeGameTest;

}

}

测试模块:

@Module

public class PipeGameTestModule {

@Provides

@Singleton

Random provideRandom() {

return mock(Random.class);

}

}

android java pipe_Java-使用Dagger 2进行Android单元测试相关推荐

  1. android java websocket client_websocket服务端,android客户端示例

    服务端库依赖详见章末 #####spring websocket服务端代码(会话过程) public class HandshakeInterceptor extends HttpSessionHan ...

  2. Android 依赖注入: Dagger 2 实例解说(一)

    本文原创,转载请注明出处:http://blog.csdn.net/zjbpku [Duplicated]   link to  Dagger on Android - Dagger2具体解释 关于D ...

  3. Android开源框架之Dagger快速入门

    文章目录 一.Dagger是什么? 二.Dagger的使用 2.1 实现目标 2.2 准备工作 2.3 添加Dagger依赖 2.4 @Inject注解的双层含义 2.5 @Component注解 2 ...

  4. android Java开发设计模式及在android中的应用解析

    android Java开发设计模式及在android中的应用解析 什么是设计模式: 可以用一句话概括设计模式---设计模式是一种利用OOP的封闭.继承和多态三大特性,同时在遵循单一职责原则.开闭原则 ...

  5. java ee 6 sdk中文版,Java EE 6 SDK+Eclipse JEE+Android ADT-Fun言

    很多时候,为了生存,需要不断的了解,学习新东西,于是头脑塞满了便便- -|||- -----------------------.. 按照自己的理解: JDK = Java Develope Kit ...

  6. Android java传递string类型数据给C

    本文接着实现<Android java传递int类型数据给C>的还未实现的方法: public native String sayHelloInC(String s); 先贴一个工具方法, ...

  7. android java.lang.IllegalArgumentException: Comparison method violates its general contract! 问题

    android  java.lang.IllegalArgumentException: Comparison method violates its general contract! 问题 jav ...

  8. 安卓java读取软件自身包名,android 获取第三方应用程序包名并启动 | 学步园

    效果图: 说明: 第一行:应用程序名称 第二行:应用程序包名 第三行:应用程序入口Activity名称 代码如下: package com.hello.project; import java.uti ...

  9. 安卓 java内存碎片_理解Android Java垃圾回收机制

    Jvm(Java虚拟机)内存模型 从Jvm内存模型中入手对于理解GC会有很大的帮助,不过这里只需要了解一个大概,说多了反而混淆视线. Jvm(Java虚拟机)主要管理两种类型内存:堆和非堆. 堆是运行 ...

最新文章

  1. C安全编码--预处理
  2. python库和模块的区别_Python动态库模块的名称与文件名不同
  3. tomcat配置项目路径或部署工程名
  4. Android7.0 发生的android.os.FileUriExposedException错误
  5. web前端开发常用的优化技巧汇总
  6. 论文笔记:Few-Shot Segmentation Without Meta-Learning : A Good Transductive Inference Is All You Need
  7. login.html id=9453,我关注的官网.html
  8. 尚硅谷 谷粒学院 毕业设计 在线教育 部署文档
  9. 推荐一款能够将爱奇艺qsv、腾讯qlv、优酷kux完美转换成mp4的三合一全能格式转换器
  10. js 拖拽上传文件及文件夹
  11. js中html5修改字体大小,jquery设置字体大小插件
  12. 戴尔服务器开机自动关机,戴尔台式电脑自动关机怎么办
  13. 解决win10以太网没有有效的ip配置
  14. TensorFlow2.0 Guide官方教程 学习笔记20 -‘Effective TensorFlow 2‘
  15. 一款【免费+简单+好用+性能强大】的词云(Wordcloud)制作工具(含详细介绍)
  16. 大数据----数据仓库设计基础(实列演示)
  17. python下载包失败,下载python包失败
  18. MySQL数据库创建表报错的解决方案
  19. 如何使用QQ号来注册腾讯云新用户账号并完成实名认证?
  20. veed.io 在线视频编辑器技术栈演进

热门文章

  1. Linux下将pycharm图标添加至桌面
  2. 13.追我的男生辣么多
  3. 【hibernate框架】各种问题用注解Annotation和mxl配置的解决
  4. 网站目录爆破的扫描器的思路
  5. Python sys模块参考手册
  6. Linux grep及正则表达式
  7. DevOps知识地图实践指南
  8. Java基础——Ajax(一)
  9. [转]阿里云配置mysql远程连接
  10. CSS3实现8种Loading效果【第二波】