【问题标题】:Using Dagger2 with flavors and androidTest source set将 Dagger2 与风味和 androidTest 源集一起使用
【发布时间】:2017-04-13 22:56:50
【问题描述】:

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

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

在我的 androidTest 源集中,我创建了一个 MockComponent 和一个 MockModule,它们创建了一个模拟版本的存储库。我想我能做的是构建一个 MockComponent 实例并使用它来提供一个 Mock Repository。问题似乎是,如果 MockComponent 和 MockModule 在 androidTest 源集中,那么 Dagger 在我构建时永远不会生成 DaggerMockComponent 类。如果我将 MockComponent 和 MockModule 移动到自动化源集,那么 Dagger 确实会生成这些类,但是我现在想要向 MockComponent 添加一个注入方法,以便我可以将一个对象注入到我的活动测试类中,但 MockComponent 可以'看不到活动测试类,因为它在 android 源代码集中。

任何想法为什么 Dagger 在 androidTest 源集中时不会生成 DaggerMockComponent 类?

【问题讨论】:

    标签: android dagger-2


    【解决方案1】:

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

    androidTestCompile "com.package.version:1.2.3" 
    

    但是对于 dagger 你必须使用 apt 所以行看起来像:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 2020-01-20
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多