将Dagger2与flavor和androidTest源集

时间:2017-04-13 22:56:51

标签: android dagger-2

我正在尝试为使用Dagger2的应用编写测试测试。该应用程序有几种构建类型,其中一种称为自动化。自动构建类型也在build.gradle中设置为testBuildType。

我要测试的活动有一个依赖于存储库的Presenter注入。当我构建除自动化之外的任何构建类型时,我想要做的是注入一个真正的存储库,然后当我构建自动构建变体时,我想注入一个模拟存储库。

在我的androidTest源代码集中,我创建了一个MockComponent和一个MockModule,它创建了mock的模拟版本的Repository。我认为我能够做的是构建一个MockComponent实例并使用它来提供一个Mock Repository。问题似乎是如果MockComponent和MockModule在androidTest源集中,那么Dagger在构建时从不生成DaggerMockComponent类。如果我将MockComponent和MockModule移动到自动化源集,那么Dagger确实会生成类,然后我会在我想要向MockComponent添加注入方法的位置,这样我就可以将一个对象注入到我的活动测试类中但是MockComponent无法看到活动测试类,因为它在android源集中。

为什么Dagger在androidTest源集中产生DaggerMockComponent类时会有什么想法?

1 个答案:

答案 0 :(得分:1)

问题最终是在我的build.gradle文件中我需要包含androidTest源集的依赖项。通常你使用

androidTestCompile "com.package.version:1.2.3" 

但是对于匕首,你必须使用apt,所以这条线看起来像:

androidTestApt "com.google.dagger:dagger-compiler:$rootProject.ext.daggerVersion"

真正令人困惑的是,因为我正在为我的testBuildType使用构建类型(自动化),所以我能够将dagger代码添加到自动化源集中,而dagger可以编译它b / c它不在androidTest源码集。然后我尝试将匕首代码添加到androidTest源集中,突然之间就像它对匕首编译器不可见b / c它永远不会为androidTest源集中指定的组件生成匕首类。