我有一个简单的Android活动,只有一个依赖项.我将依赖注入到活动中,onCreate如下所示:
Dagger_HelloComponent.builder()
.helloModule(new HelloModule(this))
.build()
.initialize(this);
Run Code Online (Sandbox Code Playgroud)
在我的ActivityUnitTestCase我要重写一个模拟的Mockito的依赖.我假设我需要使用提供模拟的特定于测试的模块,但我无法弄清楚如何将此模块添加到对象图中.
在Dagger 1.x中,这显然是用这样的东西完成的:
@Before
public void setUp() {
ObjectGraph.create(new TestModule()).inject(this);
}
Run Code Online (Sandbox Code Playgroud)
什么是Dagger 2.0相当于以上?
您可以在GitHub上看到我的项目及其单元测试.
在阅读dagger 2的文档时,我无法找到一种简单的方法来在构建应用程序进行测试时提供依赖关系.我发现的唯一线索是:
Dagger 2不支持覆盖.覆盖简单测试假货的模块可以创建模块的子类来模拟该行为.应该分解使用覆盖并依赖依赖注入的模块,以便将被覆盖的模块表示为两个模块之间的选择.
我不明白我将如何在Android上设置这样的配置,任何人都可以解释一下?
我已经构建了一个示例应用程序(是的,它实际上只是一个示例,并没有多大意义,但有助于理解Dagger 2中的Android干净架构和依赖注入).我的代码可以在github上找到.(过时.看到这篇文章)示例应用程序只是让你输入一个名称EditText,如果按下按钮,你会看到一条消息"Hello YourName"
我有三个不同的组件:ApplicationComponent,ActivityComponent和FragmentComponent.FragmentComponent包含三个模块:
InteractorModule提供了一个MainInteractor.
@Module
public class InteractorModule {
@Provides
@PerFragment
MainInteractor provideMainInteractor () {
return new MainInteractor();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的Activity-UnitTest中,我想假装这个MainInteractor.这个Interactor只有一个public Person createPerson(String name)可以创建Person对象的方法.在FakeMainInteractor具有相同的方法,但总是创建了一个名为"冒充者" Person对象,你传递的参数了独立的.
public class FakeMainInteractor {
public Person createPerson(final String name) {
return new Person("Fake Person");
}
}
Run Code Online (Sandbox Code Playgroud)
我已经为上面描述的evey组件I创建了TestComponents.在TestFragmentComponent我换InteractorModule了TestInteractorModule.
@PerFragment
@Component(dependencies = TestApplicationComponent.class, modules …Run Code Online (Sandbox Code Playgroud)