2017-01-19 1 views
0

안녕하세요 저는 Dagger 2를 사용하여 내 (부분) 프로젝트에서 순수 Java가 아니고 android 종속성이없는 다음과 같은 문제가 있습니다.UnitTest 클래스 주입

Gradle보기 또는 콘솔 (businessModule : test)에서 일부 모의 객체 (예 : 정적 문자열을 반환하는 모의 네트워크 커넥터 삽입)를 사용하여 단위 테스트를 실행할 때 문제가없고 모든 테스트가 성공합니다. 그러나 Android Studio에서 파일을 열면 Studio에서 내 DaggerMockComponent의 반환이 대상 유형과 호환되지 않는다고 말합니다. 생성 된 Component-Implementation을 열면 Android Studio는 TestUnit-Class (및 인터페이스 MockComponent)를 사용할 수 없다고 생각하여 인젝션 메소드가 반환하는 것을 모릅니다. 당신의 도움을 위해 '자바'

// 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

좋아 모두, 나는 생각-플러그인

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 순수 자바를 통해 발견 안드로이드-APT 플러그인에 대한 몇 가지 조사 후 지금

물론 루트 gradle 파일에 의존성과 plugin-name을 추가해야하지만, 이는 documentation for net.ltgt.apt에 적혀 있습니다.이 방법이 도움이되기를 바랍니다.

관련 문제