Java から Kotlin への移行中の Android プロジェクトがあります。このプロジェクトには、次の build.gradle を使用して API クライアントを実装する純粋な Kotlin モジュールがあります。
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}"
}
単体テストには注釈プロセッサの依存関係があります。
kaptTest "com.google.dagger:dagger-compiler:${dagger_version}"
生成されたソースは build/generated/source/kapt/test ディレクトリに表示されますが、テスト ソースには表示されません。たとえば、生成された DaggerUnitTestComponent をインポートして依存関係を注入することはできません。そして、私はそれを成し遂げるのに苦労しています。
このStackOverflow の回答と build.gradle に追加された次のスニペットの助けを借りて、私は Android プロジェクトですでに成功を収めていますが、純粋な 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 にあります。