我正在尝试在Android JUnit4单元测试中使用ExpectedException @Rule,但测试失败了java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch
。
其他问题表明我在其他一个图书馆中有一个旧版本的Hamcrest,但似乎并非如此。我从所有其他图书馆中排除了Hamcrest,并且明确地包括了Hamcrest 1.3。
testCompile 'org.hamcrest:hamcrest-core:1.3'
testCompile ('junit:junit:4.12') {
exclude module: 'hamcrest-core'
}
testCompile ('org.mockito:mockito-core:1.10.19') {
exclude module: 'hamcrest-core'
}
testCompile ('org.powermock:powermock-api-mockito:1.6.2') {
exclude module: 'hamcrest-core'
exclude module: 'objenesis'
}
testCompile ('org.powermock:powermock-module-junit4:1.6.2') {
exclude module: 'hamcrest-core'
exclude module: 'objenesis'
}
这是依赖图。
+--- org.hamcrest:hamcrest-core:1.3
+--- junit:junit:4.12
+--- org.mockito:mockito-core:1.10.19
| \--- org.objenesis:objenesis:2.1
+--- org.powermock:powermock-api-mockito:1.6.2
| +--- org.mockito:mockito-all:1.10.19
| \--- org.powermock:powermock-api-support:1.6.2
| +--- org.powermock:powermock-core:1.6.2
| | +--- org.powermock:powermock-reflect:1.6.2
| | \--- org.javassist:javassist:3.19.0-GA
| \--- org.powermock:powermock-reflect:1.6.2
\--- org.powermock:powermock-module-junit4:1.6.2
+--- junit:junit:4.12
\--- org.powermock:powermock-module-junit4-common:1.6.2
+--- junit:junit:4.4 -> 4.12
+--- org.powermock:powermock-core:1.6.2 (*)
\--- org.powermock:powermock-reflect:1.6.2
如果我没有将Hamcrest作为明确的依赖项,那么我会得到一个ClassNotFoundException: org.hamcrest.TypeSafeMatcher
,所以没有别的东西包括它。
我正在使用带有Gradle插件1.2.3的Android Studio 1.3.2。
答案 0 :(得分:0)
清理Android Studio中的缓存(文件 - >无效缓存/重启)修复了我的问题。不需要从JUnit和Mockito中排除Hamcrest。