【发布时间】:2015-01-02 04:33:36
【问题描述】:
我有一个使用 Mockito、Hamcrest 和 Espresso 来帮助测试的 Android 项目。
无论我对 Gradle 构建文件进行什么尝试,当我在执行 gradle androidTestCompile 之后尝试运行测试时,我都会得到一个 NoSuchMethodError for org.hamcrest.Matcher.anyOf。
这是我目前的配置:
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,我认为它们不应该干扰。
“androidTestCompile”这个模块的gradle dependencies 的输出是:
+--- 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
编辑
在进一步调查该问题后,我发现 espresso 需要 Hamcrest 1.1,但我也在使用 Hamcrest 1.3 中的 assertThat。 Hamcrest 1.3 没有 espresso 使用的 anyOf 方法。所以我想我被卡住了:)
【问题讨论】:
-
您可以在该模块上运行
gradle dependencies并发布相关任务的输出吗?
标签: android junit gradle mockito android-espresso