Ho un progetto Android che utilizza Mockito, Hamcrest ed Espresso per aiutare con i test.Configurazione di gradle per utilizzare JUnit, Mockito, Hamcrest ed Espresso
Non importa cosa provo con il file di build Gradle, ottengo un NoSuchMethodError
per org.hamcrest.Matcher.anyOf
quando provo a eseguire i miei test dopo aver eseguito gradle androidTestCompile
.
Qui è la mia configurazione attuale:
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'
)
Ho provato riscrivere i requisiti JUnit Mockito e di escludere Hamcrest in questo modo:
androidTestCompile('junit:junit:4.11') {
exclude group: 'org.hamcrest'
}
Ma questo non fa alcuna differenza.
Il progetto GameCore
è un progetto Java puro. Ha anche dipendenze da JUnit e Mockito, ma poiché sono specificate come testCompile
, non penso che dovrebbero interferire.
L'uscita per gradle dependencies
per questo modulo per 'androidTestCompile` è:
+--- 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
Modifica
Avendo ulteriormente indagato il problema, vedo che l'espresso ha bisogno Hamcrest 1.1, ma sono anche usando assertThat, che è in Hamcrest 1.3. Hamcrest 1.3 non ha il metodo anyOf utilizzato dall'espresso. Quindi suppongo di essere bloccato :)
È possibile eseguire 'gradle dependencies' su quel modulo e pubblicare l'output per l'attività rilevante? –