(问题可以作为github回购here)
编辑:看起来这是一个问题,android-apt不能很好地与robolectric一起玩。 ' gradle clean assembleDebugTest'将生成测试源,但是“gradle clean test'将不会。我认为android-apt
需要修改才能适用于这种情况。
编辑2:我通过使用compile
而不是apt
,androidTestApt
或provided
暂时更改来解决我的问题。这个问题仍将保持开放,因为我们不应该将这些内容包含在我们的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
代替apt
和androidTestApt
,那么一切都很有效!
值得注意的是,如果应用了provides
插件,则android-apt
无效。
有关完整来源,请在此处查看我的回购以说明此问题:https://github.com/jacobtabak/Robolectric-Dagger-Skeleton
有3个分支 -
master
,这是我原本想要工作的案例provided
,使用provided
并禁用android-apt
插件aptfail
,与上述情况完全相同,但应用android-apt
插件失败。谢谢!要接受答案,不得使用'编译'对于匕首编译器。