Настройка gradle для использования JUnit, Mockito, Hamcrest и эспрессо
у меня есть проект Android, который использует Mockito, Hamcrest и Espresso, чтобы помочь с тестированием.
независимо от того, что я пытаюсь с файлом сборки Gradle, я получаю NoSuchMethodError
на org.hamcrest.Matcher.anyOf
когда я пытаюсь запустить мои тесты после gradle androidTestCompile
.
вот моя текущая конфигурация:
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'
)
Я попытался переписать требования Mockito и JUnit, чтобы исключить Hamcrest следующим образом:
androidTestCompile('junit:junit:4.11') {
exclude group: 'org.hamcrest'
}
но это не имеет никакого разница.
на GameCore
проект-это чистый проект Java. Он также имеет зависимости от JUnit и Mockito, но поскольку они указаны как testCompile
, Я не думаю, что они должны вмешиваться.
вывод gradle dependencies
для этого модуля для "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
редактировать
после дальнейшего изучения проблемы я вижу, что эспрессо нужен Hamcrest 1.1, но я также использую assertThat, который находится в Hamcrest 1.3. Hamcrest 1.3 не имеет метода anyOf, который использует эспрессо. Так что, наверное, я застрял:)
2 ответов
я понял, что assertThat
находится в Hamcrest 1.1, это просто в hamcrest-integration
вместо hamcrest-core
. Я изменил файл сборки, и теперь все работает:
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'
)
Я попытался с помощью espresso-1.1-bundled.jar
но это вызвало ошибки dex, потому что были вытащены две копии Hamcrest 1.1, поэтому мне пришлось бы исключить его из кучи зависимостей.
в настоящее время я использую все эти библиотеки в своем проекте Android Gradle (мне очень нравится тестирование и TDD :) ).
вот раздел зависимостей моей сборки.файл 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:2.0.0@aar') {
transitive = true;
}
}
многие из них вы, вероятно, можете игнорировать, поэтому вот список только с конкретными для тестирования:
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')
}
и dexmaker libs можно найти здесь: https://code.google.com/p/dexmaker/downloads/detail?name=dexmaker-1.0.jar&can=2&q=
и здесь:
https://code.google.com/p/dexmaker/downloads/detail?name=dexmaker-mockito-1.0.jar&can=2&q=