Android简单Junit与Dagger 2

Ive*_*ius 9 junit android dagger-2

我曾经在MVP工作,我通常使用简单的Junit(Not the Instrumentation!)来测试我的演示者,因为演示者只有业务逻辑而且没有任何对Android内部的引用.

现在切换到Dagger 2,我明白我在为我的app组件设置"TestModule"时遇到了问题.

  1. 创建一个组件不会在测试类中起作用(可能是因为"apt"没有在那里运行)
  2. 没有找到任何使用Dagger和标准Junit测试的例子.我发现的每个例子都只依赖于Instrumentation测试或Roboelectric(基本上嘲笑活动和其他Android相关的东西),但这只是对我的UI测试,我不需要它.

为了说清楚,我说的是位于app-> src-> test文件夹的测试而不是app-> src-> androidTest!

所以我做错了什么?还是错过了什么?任何人都可以解释或举例说明如何在正常的单元测试中使用Dagger 2吗?

Dan*_*ont 5

我不确定我的解决方案是否适合您,但我认为没有理由不应该这样做.首先,我创建了testInjectionComponent

@Singleton
@Component(modules = {MockNetworkModule.class})
public interface MockInjectionComponent extends InjectionComponent {
void inject(DaggerUnitTest daggerUnitTest);
}
Run Code Online (Sandbox Code Playgroud)

然后我的单元测试我在before方法中添加了注入.像这样:

@Before
public void setUp() throws Exception {
    MockInjectionComponent mockInjectionComponent = DaggerMockInjectionComponent
            .builder()
            .mockNetworkModule(new MockNetworkModule())
            .build();
    mockInjectionComponent.inject(this);
}
Run Code Online (Sandbox Code Playgroud)

然后我只是注释我的注入对象.

编辑: 不要忘记testApt "com.google.dagger:dagger-compiler:$daggerVersion"在app.gradle文件中添加.