JMock- java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch() JMock - java.lang.NoSuchMethodError:org.hamcrest.Matcher.describeMismatch()

3

我理解的解决方案是确保在hamcrest之后加载Junit。我有一个Intellij项目,在其中设置了一个外部库,该库包含JUnit、JMock和Hamcrest。如何确保不会出现这个错误?


你正在使用哪个外部库?你的项目中是否有junit和/或Hamcrest? - Kkkev
3个回答

6
  1. junit:junit:4.11 取代了以前的 junit:junit-dep
  2. JUnit 4.11 包含 org.hamcrest:hamcrest-core:1.3 jar 作为依赖项
  3. 要在测试中使用显式的 Hamcrest matchers,请包含 org.hamcrest:hamcrest-library:1.3。
  4. org.mockito:mockito-all:1.9.x - 包含一个旧版的 Hamcrest,不作为依赖项但包装在其 jar 中。 这就是罪魁祸首。(https://code.google.com/p/mockito/issues/detail?id=459
  5. 将 org.hamcrest:hamcrest-core:1.3 放在所有测试依赖项之前
  6. 使用 Maven 的 dependencyManagement 部分来控制 junit、hamcrest 和 mockito jars 的所有传递版本。例如,spring-integration-test 传递地包含 mockito-all:1.9.0。

2

您应该确保库(jars)的兼容性。如果jar中的类使用另一个jar中的类的某个方法,并且此使用的方法是新添加的,而您正在使用旧的jar,则肯定会出现java.lang.NoSuchMethodError


0

你需要导入junit-dep.jar(它不包括hamcrest依赖项!?)而不是junit.jar。如果你在一个大型项目中使用Maven,这可能涉及到追踪所有模糊的hamcrest和junit导入。

即将发布的junit版本将与hamcrest 1.3兼容,这可能会有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接