2014-11-05 14 views
8

Mam projekt Androida, który używa Mockito, Hamcrest i Espresso do pomocy przy testowaniu.Konfigurowanie gradle do używania JUnit, Mockito, Hamcrest i Espresso

Bez względu na to, co próbuję z plikiem kompilacji Gradle, dostaję NoSuchMethodError dla org.hamcrest.Matcher.anyOf kiedy próbuję uruchomić moje testy po wykonaniu gradle androidTestCompile.

Oto moja obecna konfiguracja:

dependencies { 
    compile project(':GameCore') 
    androidTestCompile files(
      'libs/espresso-1.1.jar', 
      'libs/testrunner-1.1.jar', 
      'libs/testrunner-runtime-1.1.jar' 
    ) 
    androidTestCompile(
      'junit:junit:4.11', 
      'org.mockito:mockito-core:1.10.0', 
      'com.google.guava:guava:14.0.1', 
      'com.squareup.dagger:dagger:1.1.0', 
      'com.google.dexmaker:dexmaker:1.0', 
      'com.google.dexmaker:dexmaker-mockito:1.0', 
      'org.hamcrest:hamcrest-core:1.3', 
      'org.hamcrest:hamcrest-library:1.3' 
      ) 

Próbowałem przepisywanie wymagania JUnit z Mockito i wykluczyć Hamcrest tak:

androidTestCompile('junit:junit:4.11') { 
    exclude group: 'org.hamcrest' 
} 

Ale to nie robi żadnej różnicy.

Projekt GameCore jest projektem czysto Java. Ma również zależności od JUnit i Mockito, ale ponieważ są one określone jako testCompile, nie sądzę, że powinny przeszkadzać.

Wyjście dla gradle dependencies dla tego modułu dla „androidTestCompile` jest:

+--- junit:junit:4.11                
| \--- org.hamcrest:hamcrest-core:1.3 
+--- org.mockito:mockito-core:1.10.0 
| +--- org.hamcrest:hamcrest-core:1.1 -> 1.3 
| \--- org.objenesis:objenesis:2.1 
+--- com.google.guava:guava:14.0.1 
+--- com.squareup.dagger:dagger:1.1.0 
| \--- javax.inject:javax.inject:1 
+--- com.google.dexmaker:dexmaker:1.0 
+--- com.google.dexmaker:dexmaker-mockito:1.0 
| +--- com.google.dexmaker:dexmaker:1.0 
| \--- org.mockito:mockito-core:1.9.5 -> 1.10.0 (*) 
+--- org.hamcrest:hamcrest-core:1.3 
\--- org.hamcrest:hamcrest-library:1.3 
    \--- org.hamcrest:hamcrest-core:1.3 

Edit

uwzględniając dalsze badania tego problemu, widzę, że espresso musi Hamcrest 1.1, ale jestem również używając assertThat, który jest w Hamcrest 1.3. Hamcrest 1.3 nie ma metody AnyOf używanej przez espresso. Tak myślę, że utknąłem :)

+0

Czy można uruchomić 'gradle dependencies' na tym module i opublikować dane wyjściowe dla odpowiedniego zadania? –

Odpowiedz

4

zdałem sobie sprawę, że jest w Hamcrest assertThat 1.1, to tylko w hamcrest-integration zamiast hamcrest-core. Zmieniłem plik build i to wszystko działa teraz:

androidTestCompile files(
     'libs/espresso-1.1.jar', 
     'libs/testrunner-1.1.jar', 
     'libs/testrunner-runtime-1.1.jar' 
) 
androidTestCompile(
     'org.mockito:mockito-core:1.9.5', 
     'com.google.dexmaker:dexmaker-mockito:1.0', 
     'com.google.dexmaker:dexmaker:1.0', 
     'com.google.guava:guava:14.0.1', 
     'com.squareup.dagger:dagger:1.1.0', 
     'org.hamcrest:hamcrest-core:1.1', 
     'org.hamcrest:hamcrest-integration:1.1', 
     'org.hamcrest:hamcrest-library:1.1' 
) 

Próbowałem za pomocą espresso-1.1-bundled.jar ale który spowodował błędy Dex ponieważ dwie kopie Hamcrest 1.1 były odsłonięte w, tak bym miał do wykluczenia go z bandą zależności.

+0

Awesome! Cieszę się, że to działa. Osobiście wolałem pakowany pakiet espresso Jake'a Whartona, ale do każdego jego własnego. Szczęśliwe testy! –

1

Obecnie używam wszystkich tych bibliotek w moim projekcie Android Gradle (NAPRAWDĘ lubię testować i TDD również :)).

Oto odcinek zależności od mojego pliku build.gradle:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    //noinspection GradleDependency 
    compile 'com.google.android.gms:play-services:5.0.89' 
    provided 'com.squareup.dagger:dagger-compiler:1.2.1' 
    compile 'com.jakewharton:butterknife:5.1.2' 
    compile 'com.squareup.dagger:dagger:1.2.1' 
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' 
    compile 'com.squareup.okhttp:okhttp:2.0.0' 
    compile 'com.squareup.retrofit:retrofit:1.6.0' 
    compile 'com.google.code.gson:gson:2.3' 
    compile 'com.squareup:otto:1.3.5' 
    compile 'javax.annotation:javax.annotation-api:1.2' 
    compile 'com.google.code.findbugs:jsr305:1.3.9' 
    compile 'com.j256.ormlite:ormlite-android:4.43' 
    compile 'com.j256.ormlite:ormlite-core:4.43' 
    compile 'com.android.support:support-v13:20.0.0' 
    compile 'com.path:android-priority-jobqueue:1.1.2' 
    compile'com.squareup.picasso:picasso:2.3.3' 
    compile 'com.github.johnkil.android-robototextview:robototextview:2.1.0' 
    compile 'se.emilsjolander:stickylistheaders:2.5.0' 
    compile 'com.newrelic.agent.android:android-agent:4.+' 

    compile 'com.github.chrisbanes.actionbarpulltorefresh:library:0.9.9' 

    //mockito dependencies 
    androidTestCompile 'org.mockito:mockito-core:1.9.5' 
    androidTestCompile files('libs/dexmaker-mockito-1.0.jar') 
    androidTestCompile files('libs/dexmaker-1.0.jar') 

    //espresso dependencies 
    androidTestCompile 'com.google.guava:guava:18.0' 
    androidTestCompile 'com.squareup.spoon:spoon-client:1.1.1' 
    androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3') { 
     exclude group: 'com.squareup.dagger' 
    } 
    compile('com.crashlytics.sdk.android:crashlytics:[email protected]') { 
     transitive = true; 
    } 
} 

Wiele z nich prawdopodobnie można ignorować tak tutaj jest lista tylko z konkretnych nich do testowania:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile project(':facebook') 
    compile project(':library') 
    //noinspection GradleDependency 

    //mockito dependencies 
    androidTestCompile 'org.mockito:mockito-core:1.9.5' 
    androidTestCompile files('libs/dexmaker-mockito-1.0.jar') 
    androidTestCompile files('libs/dexmaker-1.0.jar') 

    //espresso dependencies 
    androidTestCompile 'com.google.guava:guava:18.0' 
    androidTestCompile 'com.squareup.spoon:spoon-client:1.1.1' 
    androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3') 
} 

a libs dexmaker można znaleźć tutaj: https://code.google.com/p/dexmaker/downloads/detail?name=dexmaker-1.0.jar&can=2&q=

i tutaj:

https://code.google.com/p/dexmaker/downloads/detail?name=dexmaker-mockito-1.0.jar&can=2&q=

+0

Dziękuję za opublikowanie pliku kompilacji, ale nie widzę tutaj hamcrestu. Czy to jest w twoim katalogu libs? – Pikaling

+0

Hamcrest pochodzi z espresso, więc spodziewam się, że wszystko jest zawarte w tej bibliotece. –

+1

Ah OK.Nie używam wersji all-in-one espresso, ponieważ staram się unikać konfliktów zależnościowych, dlatego dołączam hamcrest osobno – Pikaling

Powiązane problemy