こんにちは私は、私の(部分)プロジェクトでDagger 2を使って、純粋にJavaで、アンドロイドの依存関係がないという問題を抱えています。UnitTestのクラスを入力してください
Gradleビューまたはコンソール(businessModule:test)でいくつかのモックを使用して単体テストを実行すると(例:静的な文字列を返すモックネットワークコネクタを挿入)、問題はなく、すべてのテストが成功します。しかし、Android Studioでファイルを開くと、スタジオによると、DaggerMockComponentの戻り値はターゲットタイプと互換性がありません。生成されたComponent-Implementationを開くと、AndroidスタジオはTestUnitクラス(およびインターフェイスMockComponent)が使用できないと考えて、注入メソッドが返すものがわからないことがわかりました。あなたの助けのための「Javaの
// allow inject of core into core. https://github.com/griffio/dagger2-example
sourceSets {
dagger {
java {
srcDirs = ['src/dagger/java']
}
}
daggerTest {
java {
srcDirs = ['src/daggerTest/java']
}
}
}
configurations {
compileDagger
}
compileJava {
description = "dagger annotation processor is loaded automatically from classpath"
sourceSets.dagger.java.srcDirs*.mkdirs()
classpath += configurations.compileDagger
options.compilerArgs += [
'-s', sourceSets.dagger.java.srcDirs.iterator().next()
]
}
compileTestJava {
//dependsOn compileDaggerTestJava
description = "dagger annotation processor is loaded automatically from classpath"
sourceSets.daggerTest.java.srcDirs*.mkdirs()
classpath += configurations.compileDagger
options.compilerArgs += [
'-s', sourceSets.daggerTest.java.srcDirs.iterator().next()
//'-s src/testDaggerJava'
]
}
task deleteDagger(type: Delete) {
delete 'src/dagger', 'src/daggerTest'
}
clean.dependsOn deleteDagger
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
// Force Java 7 as newer versions can not be processed by dex for API 21
targetCompatibility = '1.7'
sourceCompatibility = '1.7'
[...]
// Dagger for dependency injection
compile 'com.google.dagger:dagger:2.8'
testCompile 'com.google.dagger:dagger:2.8'
compileOnly 'com.google.dagger:dagger-compiler:2.8'
testCompileOnly 'com.google.dagger:dagger-compiler:2.8'
[...]
testCompile 'junit:junit:4.12'
}
ありがとう:
プラグインを適用します。
は、私は次のGradleのファイルを持っています。