Android测试:Dagger2 + Gradle

时间:2016-03-12 09:22:58

标签: android gradle integration-testing dagger-2

answer非常有助于我指出正确的方向。

但是,事情并不完全清楚。

拜托,有人可以向我解释一下:

  • 选项1:通过子类化模块覆盖绑定

这意味着我实际上必须更改生产代码,以便我可以注入模拟依赖项?

示例:

@Test
public void testFoo(){
MyClass class=new MyClass();
assertTrue(class.doStuff());
}

public class MyClass(){
@Inject
private Dependency dependency;

public MyClass(){}   
MyDaggerComponent.builder().foo(new MockDependency).build.inject(MyClass.this);
}

这意味着我需要更改MyClass以传递模拟模块

正确?

  • 选项2:单独的组件配置

这是否意味着我将拥有2个Gradle productFlavors, - 包含生产模块和组件的一个, - 一个包含嘲笑的人。

正确?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

依赖注入的强大功能非常方便,特别是对于测试,因为您可以轻松地将测试环境中的依赖项切换为虚拟依赖项。

它的构建方式如下:

  • 您的生产代码中的dependecies应注入非硬编码。
  • 在您的测试环境中,您应该构建等效的测试模块和测试组件,以替换实际代码中的依赖项。

如果你想要一个正确的例子我真的建议你检查这个boilerplate,因为它完全基于使用Dagger2的DI。

锅炉板当前处理的依赖关系如下:

  • 数据库依赖:封装所有数据库操作。
  • 共享偏好设施依赖项:处理共享偏好设置。
  • 本地文件依赖:处理文件保存。
  • Google Analytics依赖:涵盖向分析后端报告事件的所有操作(GA,Segment,FB,Flurry ..)
  • 记录依赖项:封装与记录到控制台相关的所有操作
  • Api依赖:封装所有与API相关的操作