小编典典

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

all

我正在使用 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。我如何找到它正在使用的 hamcrest.MatcherAssert(即它用于
hamcrest.MatcherAssert 的 jar 文件)?AFAICT,我的类路径中唯一的 hamcrest jar 是 1.3.RC2。

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

如何输出 IntelliJ 正在使用的运行时 CLASSPATH?


阅读 69

收藏
2022-05-27

共1个答案

小编典典

问题是使用了错误hamcrest.Matcher的而不是hamcrest.MatcherAssert类。这是从我的依赖项之一指定的
junit-4.8 依赖项中提取的。

要查看测试时从哪个来源包含哪些依赖项(和版本),请运行:

mvn dependency:tree -Dscope=test
2022-05-27