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

问题:

我使用的是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它正在使用(即哪个jar文件用于hamcrest.MatcherAssert)? AFAICT,我班级中唯一的hamcrest罐是1.3.RC2。
IntelliJ IDEA使用它自己的JUnit或Hamcrest的副本吗?
如何输出IntelliJ正在使用的运行时CLASSPATH?

回答:

确保导入顺序上的hamcrest jar比您的JUnit的 jar高。
 JUnit的自带的org.hamcrest.Matcher类可能正在被使用。
您也可以下载并使用JUnit的-DEP-4.10.jar而不是hamcrest类的JUnit。
mockito也有其中的hamcrest类,所以你可能需要移动\重新排序它

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Getting “NoSuchMethodError: org.hamcrest.Matcher.describeMismatch” when running test in IntelliJ 10.5

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

62 − 59 =