Dagger + Robolectric + Gradle + APT - 未为测试模块生成源

时间:2014-10-07 23:04:28

标签: gradle robolectric apt dagger

(问题可以作为github回购here

编辑:看起来这是一个问题,android-apt不能很好地与robolectric一起玩。 ' gradle clean assembleDebugTest'将生成测试源,但是“gradle clean test'将不会。我认为android-apt需要修改才能适用于这种情况。

编辑2:我通过使用compile而不是aptandroidTestAptprovided暂时更改来解决我的问题。这个问题仍将保持开放,因为我们不应该将这些内容包含在我们的apks中。

我目前在我的项目中依赖于Android APT插件。不幸的是,当应用APT插件时,我无法通过测试。

以下是项目结构的简要概述:

src
├───androidTest/java/com.example.myapplication
│   ├───MyTest
│   ├───TestModule
│   └───TestMyApplication [extends Application]
│
└───main/java/com.example.myapplication
    ├───MyApplication
    └───MyModule

TestMyApplication覆盖MyApplication中的getModules()方法并添加TestModule。

我的依赖项部分如下所示:

dependencies {
  compile 'com.squareup.dagger:dagger:1.2.2'
  apt 'com.squareup.dagger:dagger-compiler:1.2.2'
  androidTestApt 'com.squareup.dagger:dagger-compiler:1.2.2'
  androidTestCompile 'junit:junit:4.11'
  androidTestCompile 'org.robolectric:robolectric:2.3'
}

然而,我在运行时遇到错误:

  

java.lang.RuntimeException:java.lang.IllegalStateException:无法加载类com.example.myapplication.TestModule的模块适配器。请确保为此模块运行代码生成。

如果我停用android-apt并使用provides代替aptandroidTestApt,那么一切都很有效!

值得注意的是,如果应用了provides插件,则android-apt无效。

有关完整来源,请在此处查看我的回购以说明此问题:https://github.com/jacobtabak/Robolectric-Dagger-Skeleton

有3个分支 -

  • master,这是我原本想要工作的案例
  • provided,使用provided并禁用android-apt插件
  • aptfail,与上述情况完全相同,但应用android-apt插件失败。

谢谢!要接受答案,不得使用'编译'对于匕首编译器。

0 个答案:

没有答案