如何在Java / Kotlin中包含Annotation Processor生成的代码来测试类路径

我有一个Android项目正在从Java迁移到Kotlin。 在这个项目中,我有一个纯Kotlin模块,在这里我使用下面的build.gradle实现一个API客户端:

apply plugin: 'kotlin' apply plugin: 'kotlin-kapt' dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlin_version}" implementation "com.squareup.retrofit2:retrofit:${retrofit_version}" implementation "com.squareup.retrofit2:converter-gson:${retrofit_version}" implementation "com.google.code.gson:gson:${gson_version}" implementation "com.squareup.okhttp3:logging-interceptor:${okhttp_version}" implementation "io.reactivex.rxjava2:rxjava:${rx_java_version}" implementation "io.reactivex.rxjava2:rxkotlin:${rx_kotlin_version}" implementation "com.jakewharton.retrofit:retrofit2-rxjava2-adapter:${retrofit2_rxjava2_adapter_version}" compileOnly "javax.annotation:jsr250-api:${jsr250_version}" implementation "com.google.dagger:dagger:${dagger_version}" kapt "com.google.dagger:dagger-compiler:${dagger_version}" testImplementation "junit:junit:${junit_version}" testImplementation "org.mockito:mockito-core:${mockito_version}" testImplementation "org.hamcrest:hamcrest-junit:${hamcrest_version}" testImplementation "com.squareup.okhttp3:mockwebserver:${mockwebserver_version}" // Dependence injection kaptTest "com.google.dagger:dagger-compiler:${dagger_version}" } 

unit testing有一个Annotation Processor依赖关系:

 kaptTest "com.google.dagger:dagger-compiler:${dagger_version}" 

我可以在build / generated / source / kapt / test目录中看到生成的源文件,但是它们对测试源是不可见的,也就是说,不可能导入生成的DaggerUnitTestComponent来注入依赖项,例如。 而且我很难完成它。

这种事情我已经在Android项目上取得了成功,在StackOverflow答案的帮助下,以及下面的代码片段添加到build.gradle中,但是对于纯粹的Kotlin / Java项目,则不适用。

 android.applicationVariants.all { def aptOutputDir = new File(buildDir, "generated/source/apt/${it.unitTestVariant.dirName}") it.unitTestVariant.addJavaSourceFoldersToModel(aptOutputDir) } 

有效地说,我正在使用Android Studio 3.0.1和Kotlin 1.2.10。 Kotlin库模块的来源位于src / main / java和src / test / java。

你可能想看看一个使用匕首的Kotlin项目的例子:( 这里)

从我所看到的,使用生成的类的测试源在Gradle构建过程中应该编译得很好,但IDE可能无法正确地选取它们。

尝试在项目中更新Kotlin到更新的版本( 1.2.10应该处理这个)。 如果这没有帮助,请尝试使用上述示例中的idea插件,为测试生成的源配置如下:

 apply plugin: 'idea' idea { module { testSourceDirs += file('build/generated/source/kapt/test') generatedSourceDirs += file('build/generated/source/kapt/test') } }