在 IntelliJ 10.5 中运行测试时获取“NoSuchMethodError: org.hamcrest.Matcher.describeMismatch”

2022-08-31 05:38:25

我使用的是JUnit-dep 4.10和Hamcrest 1.3.RC2。

我创建了一个如下所示的自定义匹配器:

public static class MyMatcher extends TypeSafeMatcher<String> {
    @Override
    protected boolean matchesSafely(String s) {
        /* implementation */
    }

    @Override
    public void describeTo(Description description) {
        /* implementation */
    }

    @Override
    protected void describeMismatchSafely(String item, Description mismatchDescription) {

        /* implementation */
    }
}

当使用 Ant 从命令行运行时,它可以很好地工作。但是当从IntelliJ运行时,它会失败:

java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/Description;)V
    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:18)
    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)
    at com.netflix.build.MyTest.testmyStuff(MyTest.java:40)

我的猜测是它使用了错误的hamcrest。MatcherAssert.我如何找到哪个笨蛋。MatcherAssert 它正在使用(即它用于hamcrest的jar文件。MatcherAssert)?AFAICT,我的类路径中唯一的hamcrest jar是1.3.RC2。

IntelliJ IDEA是使用自己的JUnit或Hamcrest副本吗?

如何输出 IntelliJ 正在使用的运行时类路径?


答案 1

确保在导入订单上,hamcrest jar 高于 JUnit jar。

JUnit带有自己的类,可能正在被使用。org.hamcrest.Matcher

您还可以下载并使用 junit-dep-4.10.jar而不是没有 hamcrest 类的 JUnit。

mockito也有hamcrest类,所以你可能还需要移动\重新排序它


答案 2

当您在类路径上具有 mockito-all 时,也会出现此问题,该路径已被弃用。

如果可能的话,只需包括模拟核心

Maven config for mix junit, mockito and hamcrest:

<dependencies>
  <dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-core</artifactId>
    <version>1.3</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-library</artifactId>
    <version>1.3</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.9.5</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>
</dependencies>

推荐