Gradle 匕首&x2B;机器人分子+;格拉德尔+;APT-未为测试模块生成源

Gradle 匕首&x2B;机器人分子+;格拉德尔+;APT-未为测试模块生成源,gradle,robolectric,apt,dagger,Gradle,Robolectric,Apt,Dagger,(问题可通过github回购协议获得) 编辑:这似乎是安卓apt与robolectric配合不好的问题gradle clean assembleDebugTest'将生成测试源,但'gradle clean test'不会。我认为需要修改安卓apt以适应这种情况 编辑2:我通过使用compile而不是apt、androidTestApt或提供的临时更改解决了问题。这个问题仍然是开放的,因为我们不应该在APK中包含这些内容 我目前在我的项目中有依赖项,需要Android APT插件。不幸的是,当应

(问题可通过github回购协议获得)

编辑:这似乎是安卓apt与robolectric配合不好的问题gradle clean assembleDebugTest'将生成测试源,但'gradle clean test'不会。我认为需要修改安卓apt
以适应这种情况

编辑2:我通过使用
compile
而不是
apt
androidTestApt
或提供的
临时更改解决了问题。这个问题仍然是开放的,因为我们不应该在APK中包含这些内容

我目前在我的项目中有依赖项,需要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
,一切都很好

值得注意的是,如果应用了
android apt
插件,
提供的
将不起作用

有关完整的来源,请查看我的回购协议,以说明此问题:

有3个分支机构:

  • master
    ,这是我想工作的原始案例
  • 提供的
    ,它使用
    提供的
    工作,并且禁用了
    android apt
    插件
  • aptfail
    ,与上述情况完全相同,但应用了
    android apt
    插件后失败

谢谢!要让答案被接受,就不能在dagger编译器中使用“compile”。

我认为你的机器人电子测试不合适。Gradle
test
运行普通的java单元测试,而
assembleDebugTest
打包了在设备上运行的Android检测测试。android apt的
插件支持后者。因此,即使您将测试移动到正确的位置,您也会遇到
android-apt
没有挂接到java测试编译中的问题,这是一个悬而未决的问题。当你说android apt破坏了提供的
时,那可能是一个bug。有很多关于Roboelectric和Android Gradle的文章,所以可能会有更多的问题。看看吧,我很确定测试在正确的地方。如果apt android无法支持这种可以理解的场景,但最近有人告诉我,“apt”配置基本上与“提供的”配置相同,只是“apt”使您能够配置编译器参数。我相信有一种方法可以实现这一点,但找到它肯定不是你的责任。别误会我的意思,我很想让它实现,但如果单元测试是为了实现这一点,那么对我来说就更有意义了。但是,您链接到的deckard项目在
src/test/java
中有测试,这与您在这里描述的不同。本周我将在这方面投入一些时间,看看我能在安卓apt中做些什么来让它发挥作用。太棒了,我确实尝试过更改test dir的名称,但没有什么不同。谢谢你的关注!具有讽刺意味的是,我对使用compile而不是apt的“修复”使我超出了dex方法的限制。