2017-01-19 8 views
0

こんにちは私は、私の(部分)プロジェクトで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のファイルを持っています。

答えて

0

[OK]を誰も、私はアイデア-プラグイン

apply plugin: 'java' 
apply plugin: "net.ltgt.apt" 
apply plugin: "idea" 

task cleanGenerated(type: Delete) { 
    delete 'build' 
} 

clean.dependsOn cleanGenerated 


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' 
    apt 'com.google.dagger:dagger-compiler:2.8' 
    testCompile 'com.google.dagger:dagger:2.8' 
    testApt 'com.google.dagger:dagger-compiler:2.8' 

    [...] 

    testCompile 'junit:junit:4.12' 

} 
との組み合わせで作業溶液を持ち、追加の夜、私は( net.ltgt.apt)のapt-純粋なJavaのつまずいアンドロイド-aptのプラグインのいくつかの研究の後、現在は

もちろん、ルートのグラデルファイルに依存関係とプラグイン名を追加する必要がありますが、これはdocumentation for net.ltgt.aptに書き込まれています。

関連する問題