如何使用 hamcrest 断言 Set 具有精确 属性 的项目
How to assert that Set has item with exact property with hamcrest
我一直在尝试使用这个 solution 断言我的 Set 具有给定 属性 和 hamcrest 的集合,但我有 :
java.lang.NoSuchMethodError:
org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/Description;)V
at org.hamcrest.Condition$Matched.matching(Condition.java:52)
进口:
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasProperty;
import static org.junit.Assert.assertThat;
代码:
assertThat(mySet, contains(hasProperty("id", equalTo("expectedId"))));
你有什么好的想法吗?
那么,您应该尝试让 assertThat 为您完成工作。
Set<WhateverPropertyTypeYouAreUsing> expectedSet = Collections.singleton( ... create a property object with that id/value);
assertThat(mySet, is(expectedSet))
此处的限制:假定您的集合仅包含一个 属性 值。
否则,您可以选择:
assertThat(mySet.contains(someProperty), is(true))
(可能带有附加消息以更好地描述失败的断言)。
先决条件:您的 属性 class 应该以合理的方式实施 equals()。
另一种方法是:
assertTrue(mySet.contains(someProperty);
你的原始代码没问题。您的问题可能是由于某些版本冲突引起的。顺便说一句,您应该使用 Hamcrest 的 assertThat
(import static org.hamcrest.MatcherAssert.assertThat
),而不是 JUnit 的
我一直在尝试使用这个 solution 断言我的 Set 具有给定 属性 和 hamcrest 的集合,但我有 :
java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/Description;)V at org.hamcrest.Condition$Matched.matching(Condition.java:52)
进口:
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasProperty;
import static org.junit.Assert.assertThat;
代码:
assertThat(mySet, contains(hasProperty("id", equalTo("expectedId"))));
你有什么好的想法吗?
那么,您应该尝试让 assertThat 为您完成工作。
Set<WhateverPropertyTypeYouAreUsing> expectedSet = Collections.singleton( ... create a property object with that id/value);
assertThat(mySet, is(expectedSet))
此处的限制:假定您的集合仅包含一个 属性 值。
否则,您可以选择:
assertThat(mySet.contains(someProperty), is(true))
(可能带有附加消息以更好地描述失败的断言)。
先决条件:您的 属性 class 应该以合理的方式实施 equals()。
另一种方法是:
assertTrue(mySet.contains(someProperty);
你的原始代码没问题。您的问题可能是由于某些版本冲突引起的。顺便说一句,您应该使用 Hamcrest 的 assertThat
(import static org.hamcrest.MatcherAssert.assertThat
),而不是 JUnit 的