gpt4 book ai didi

android - Dagger 不为/测试类生成组件

转载 作者:IT老高 更新时间:2023-10-28 13:23:52 25 4
gpt4 key购买 nike

我在这里遵循指南:https://github.com/ecgreb/dagger-2-testing-demo

我的 app/src/main 中有以下设置(省略了注入(inject)和 @Provides 代码):

public class FlingyApplication extends Application {
@Singleton
@Component(modules = { FlingyModule.class })
public interface FlingyComponent
}

@Module
public class FlingyModule

在 app/src/test 中:

public class TestFlingyApplication extends Application {
@Singleton
@Component(modules = { TestFlingyModule.class })
public interface TestFlingyComponent extends FlingyComponent
}

@Module
public class TestFlingyModule

到目前为止,它与示例 github 几乎相同。当 dagger 去为 src/main 中的组件构建器生成代码时,它们会正确生成。但是,Dagger 不会为 src/test 中的组件构建器生成代码。

我的主要 build.gradle:

dependencies {
classpath 'com.android.tools.build:gradle:2.1.0-alpha3'

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.5.1'
}

我的应用程序/build.gradle

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'


android {
# There is obviously more in here, but this is the custom part:
packagingOptions {
exclude 'META-INF/services/javax.annotation.processing.Processor'
}
}

dependencies {
compile 'com.squareup:otto:1.3.8'
compile 'com.android.support:cardview-v7:23.1.1'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.jakewharton:butterknife:7.0.1'

compile 'com.google.dagger:dagger:2.0.1'
apt 'com.google.dagger:dagger-compiler:2.0.1'
compile 'javax.annotation:javax.annotation-api:1.2'

compile 'io.reactivex:rxandroid:1.1.0'
compile 'io.reactivex:rxjava:1.1.0'

testCompile 'com.neenbedankt.gradle.plugins:android-apt:1.4'
testCompile 'junit:junit:4.12'
testCompile 'org.robolectric:robolectric:3.0'
testCompile 'org.mockito:mockito-core:1.10.19'
}

所以当我构建时,我得到了 DaggerFlingyApplication_FlingyComponent 类,但没有得到 DaggerTestFlingyApplication_TestFlingyComponent

我注意到的一件有趣的事情是,如果我换行:

apt 'com.google.dagger:dagger-compiler:2.0.1'
# TO
compile 'com.google.dagger:dagger-compiler:2.0.1'

我在运行 ./gradlew compileDebugUnitTestSources 时看到以下内容:

:app:compileDebugJavaWithJavac
Note: /app/build/generated/source/apt/debug/com/jy/flingy/DaggerFlingyApplication_FlingyComponent.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
:app:preDebugUnitTestBuild UP-TO-DATE
:app:prepareDebugUnitTestDependencies
:app:compileDebugUnitTestJavaWithJavac
Note: /app/build/intermediates/classes/test/debug/com/jy/flingy/DaggerTestFlingyApplication_TestFlingyComponent.java uses unchecked or unsafe operations.

我不知道为什么它会构建为中间体,我假设我需要 build.gradle 文件才能使用 apt 而不是 compile,但我不能似乎弄清楚如何让它发挥作用。我知道这绝对有可能。

最佳答案

您需要将以下内容添加到您的 build.gradle 文件中以进行插桩测试:

androidTestApt 'com.google.dagger:dagger-compiler:<version>'

或用于 JUnit 测试:

testApt 'com.google.dagger:dagger-compiler:<version>'

这是为您的测试组件生成 Dagger 代码所必需的。


编辑:

如果您使用的是 jack 工具链,请添加以下内容安卓测试:

androidTestAnnotationProcessor 'com.google.dagger:dagger-compiler:<version>'

对于 JUnit 测试:

testAnnotationProcessor 'com.google.dagger:dagger-compiler:<version>'

编辑:

如果您将 kotlin-kapt 用于 Kotlin 代码,请使用以下代码:

kaptAndroidTest 'com.google.dagger:dagger-compiler:<version>'

或用于 JUnit 测试:

kaptTest 'com.google.dagger:dagger-compiler:<version>'

检查 this更多信息的链接。

关于android - Dagger 不为/测试类生成组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36231457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com