【问题标题】:Hamcrest hasItem not matching in ArrayListHamcrest hasItem 在 ArrayList 中不匹配
【发布时间】:2014-03-24 09:25:21
【问题描述】:

我目前正在测试hasItem() Matcher,但无济于事。请看下面的示例代码:

List<String> list = new ArrayList<String>();

list.add("1");
list.add("2");
list.add("3");

org.junit.Assert.assertThat(list, hasItem("3"));

它产生

java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/Description;)V
    at org.hamcrest.core.IsCollectionContaining.matchesSafely(IsCollectionContaining.java:31)
    at org.hamcrest.core.IsCollectionContaining.matchesSafely(IsCollectionContaining.java:14)
    at org.hamcrest.TypeSafeDiagnosingMatcher.matches(TypeSafeDiagnosingMatcher.java:55)
    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:12)
    at org.junit.Assert.assertThat(Assert.java:865)
    at org.junit.Assert.assertThat(Assert.java:832)
    ...

【问题讨论】:

  • This 可能会有所帮助。
  • 这通常发生在您导入了不同版本的 Hamcrest-all、Hamcrest-core 或与 JUnit 自带的 Hamcrest 冲突时。尝试使用 JUnit-dep(没有依赖的那个)。

标签: java unit-testing junit hamcrest


【解决方案1】:

我进行了本地测试,使用 JUnit-4.11 和 Hamcrest-Core-1.3 对我来说效果很好:

import java.util.ArrayList;
import java.util.List;

import org.hamcrest.core.IsCollectionContaining;
import org.junit.Test;

public class Example {
    @Test public void test() {
        List<String> list = new ArrayList<String>();
        list.add("1");
        list.add("2");
        list.add("3");
        org.junit.Assert.assertThat(list, IsCollectionContaining.hasItem("3"));
    }
}

您能否使用与我相同的库版本和导入再次尝试?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2015-09-15
    相关资源
    最近更新 更多