1

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 にあります。

4

1 に答える 1

2

ダガーを使用する 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')
    }
}
于 2018-01-12T15:50:57.770 に答える