标签: hamcrest

在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 */
    }
}
Run Code Online (Sandbox Code Playgroud)

使用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)
Run Code Online (Sandbox Code Playgroud)

我的猜测是它使用了错误的hamcrest.MatcherAssert.我如何找到它使用的hamcrest.MatcherAssert(即哪个jar文件用于hamcrest.MatcherAssert)?AFAICT,我班级路径中唯一的火腿罐是1.3.RC2.

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

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

java junit intellij-idea hamcrest junit4

222
推荐指数
6
解决办法
10万
查看次数

我为什么要使用Hamcrest-Matcher和assertThat()而不是传统的assertXXX() - 方法

当我查看Assert类JavaDoc中的示例时

assertThat("Help! Integers don't work", 0, is(1)); // fails:
// failure message:
// Help! Integers don't work
// expected: is <1> 
// got value: <0>
assertThat("Zero is one", 0, is(not(1))) // passes
Run Code Online (Sandbox Code Playgroud)

比方说,我没有看到一个很大的优势assertEquals( 0, 1 ).

如果构造变得更复杂但是你看到更多的优点,那么对于消息可能很好吗?可读性?

java testing junit hamcrest junit4

150
推荐指数
5
解决办法
5万
查看次数

在Hamcrest中检查列表是否为空

我想知道是否有人知道如何使用assertThat()和检查列表是否为空Matchers

我只能使用JUnit的最佳方式:

assertFalse(list.isEmpty());
Run Code Online (Sandbox Code Playgroud)

但我希望在Hamcrest有一些方法可以做到这一点.

java collections junit hamcrest

142
推荐指数
3
解决办法
11万
查看次数

如何使用Hamcrest声明某些东西是空的?

我怎么assertThatnull

例如

 assertThat(attr.getValue(), is(""));
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误,说我不能null进去is(null).

java assert hamcrest

134
推荐指数
4
解决办法
8万
查看次数

java.lang.NoClassDefFoundError:org/hamcrest/SelfDescribing

在运行junit测试时,eclipse我得到了这个Exception:

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
Run Code Online (Sandbox Code Playgroud)

我添加了junit.jar库文件.

我试过不同版本的junit.jar的:4.4,4.8等等.

如何修复此异常?

java eclipse junit noclassdeffounderror hamcrest

105
推荐指数
6
解决办法
13万
查看次数

Hamcrest比较收藏品

我想比较2个列表:

assertThat(actual.getList(), is(Matchers.containsInAnyOrder(expectedList)));
Run Code Online (Sandbox Code Playgroud)

但想法

java: no suitable method found for assertThat(java.util.List<Agent>,org.hamcrest.Matcher<java.lang.Iterable<? extends model.Agents>>)
method org.junit.Assert.<T>assertThat(T,org.hamcrest.Matcher<T>) is not applicable
  (no instance(s) of type variable(s) T exist so that argument type org.hamcrest.Matcher<java.lang.Iterable<? extends model.Agents>> conforms to formal parameter type org.hamcrest.Matcher<T>)
method org.junit.Assert.<T>assertThat(java.lang.String,T,org.hamcrest.Matcher<T>) is not applicable
  (cannot instantiate from arguments because actual and formal argument lists differ in length)
Run Code Online (Sandbox Code Playgroud)

我该怎么写呢?

java junit hamcrest

100
推荐指数
5
解决办法
11万
查看次数

如何断言Iterable包含具有特定属性的元素?

假设我想使用此签名对方法进行单元测试:

List<MyItem> getMyItems();
Run Code Online (Sandbox Code Playgroud)

假设MyItem是一个Pojo,它有许多属性,其中一个是"name"通过访问的getName().

我关心验证的是List<MyItem>,或者任何Iterable,包含两个MyItem实例,其"name"属性具有值"foo""bar".如果任何其他属性不匹配,我真的不关心此测试的目的.如果名称匹配,则是成功的测试.

如果可能的话,我希望它是单行的.这是我想要做的事情的一些"伪语法".

assert(listEntriesMatchInAnyOrder(myClass.getMyItems(), property("name"), new String[]{"foo", "bar"});
Run Code Online (Sandbox Code Playgroud)

哈姆克雷斯特会对这类事情有好处吗?如果是这样,我上面的伪语法的hamcrest版本到底是什么?

java unit-testing hamcrest junit4

99
推荐指数
7
解决办法
12万
查看次数

如何一起使用JUnit和Hamcrest?

我无法理解JUnit 4.8应该如何与Hamcrest匹配器一起使用.有内部定义了一些匹配器junit-4.8.jarorg.hamcrest.CoreMatchers.同时,也有一些其他的匹配器hamcrest-all-1.1.jarorg.hamcrest.Matchers.那么,去哪里?我应该在项目中明确包含hamcrest JAR并忽略JUnit提供的匹配器吗?

特别是,我对empty()匹配器很感兴趣,并且无法在任何这些罐子中找到它.我需要别的吗?:)

还有一个哲学问题:为什么JUnit将org.hamcrest包装包含在自己的发行版中而不是鼓励我们使用原始的hamcrest库?

java junit hamcrest

87
推荐指数
4
解决办法
7万
查看次数

使用Hamcrest获得多个正确结果(是否存在or-matcher?)

我对匹配者比较陌生.我正在和Hamcrest一起 JUnit并且我喜欢它.

有没有办法说明多种选择中的一种是正确的?

就像是

assertThat( result, is( either( 1, or( 2, or( 3 ) ) ) ) ) //does not work in hamcrest
Run Code Online (Sandbox Code Playgroud)

我正在测试的方法返回一个集合的一个元素.该列表可能包含多个候选人.我当前的实现返回第一个命中,但这不是必需的.如果返回任何可能的候选人,我希望我的测试用例成功.你会怎么用Java表达这个?

(我对hamcrest替代品持开放态度)

java junit hamcrest matcher

71
推荐指数
2
解决办法
3万
查看次数

hamcrest-library Matchers和hamcrest-core CoreMatchers之间的区别

它看起来像hamcrest org.hamcrest.Matchers类非常相似org.hamcrest.CoreMatchers(虽然看起来Matchers有更多).为什么我会选择使用CoreMatchers(除了它看起来类似稍小),为什么这两个类如此相似?

junit hamcrest

64
推荐指数
2
解决办法
1万
查看次数