- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何使用 Hamcrest 中的 TestNG 和 hasItem
匹配空集合?这是我通过一项测试得到的结果。
java.lang.AssertionError:
Expected: a collection containing email = null phone = null
got: <[]>
这是我的匹配器类:
private static class MyPersonMatcher extends TypeSafeMatcher<Person> {
private final String email;
private final String phone;
public ContactAgentUsageMatcher() {
}
public ContactAgentUsageMatcher(String email, String phone, Integer listingId) {
this.email = email;
this.phone = phone;
}
@Override
public void describeTo(Description description) {
description.appendText("email = ");
description.appendValue(this.email);
description.appendText(" phone = ");
description.appendValue(this.phone);
}
@Override
public boolean matchesSafely(ContactAgentUsage contactAgentUsage) {
if ((this.email == null) && (this.phone == null)) {
return true;
}
else {
return ObjectUtils.equals(this.email, contactAgentUsage.getEmail())
&& ObjectUtils.equals(this.phone, contactAgentUsage.getPhone());
}
}
}
失败的测试是
assertThat(argument.getAllValues(), hasItem(expectedMatcher));
其中expectedMatcher
由数据提供者提供。我不确定要传递什么来匹配这个“空集合”。我正在传递默认构造函数,但我知道这不起作用,因为它创建带有 null
成员的集合。
这是我的数据提供程序的一部分:
{ new ContactAgentUsageMatcher()}
最佳答案
当配置的电子邮件
和姓名
均设置为null
时,您的自定义匹配器将匹配任何现有的Person
。但是,该集合不包含要匹配的任何 Person
。汉克雷斯特的hasItem(matcher)
在这种情况下测试失败,并且是用于空集合的错误匹配器。
这里有两种解决方法:
更改数据提供程序和测试以采用包括 hasItem
的完整匹配器。对于上述情况,您将通过 emptyIterable
。缺点是您需要告诉 Java 编译器应该使用哪种泛型类型,这会使测试变得困惑。
创建第二个测试来处理生成空集合的数据集。
关于java - 将空集合与 Hamcrest 的 hasItem() 相匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12312117/
我看到了这个post assertThat( myClass.getMyItems(), contains( hasProperty("foo", is("bar")), hasPro
我有一个整数列表(当前),我想检查这个列表是否包含预期列表中的所有元素,甚至不包含列表 notExpected 中的一个元素,所以代码如下: List expected= new ArrayL
我已经绝望了,我不明白为什么这个测试没有被评估为成功。我已经检查过一百万次了: package someptest; import static org.hamcrest.MatcherAssert.
我遇到了 hamcrest 和mockito 的问题。这是我正在尝试做的事情: public class A{ public void foo(List arg){ re
我想测试我的 Controller 并使用以下方法来测试它: package spittr.web; import static org.springframework.test.web.servle
如何使用 Hamcrest 中的 TestNG 和 hasItem 匹配空集合?这是我通过一项测试得到的结果。 java.lang.AssertionError: Expected: a collec
我目前正在测试 hasItem() Matcher 但无济于事。请参阅下面的示例代码: List list = new ArrayList(); list.add("1"); list.add("2"
我刚刚创建了一个虚拟 Maven 项目: 4.0.0 com.loki2302 junit-test-app 0.0.1-SNAPSHOT jar j
import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasItem; im
为什么编译不出来啊,怎么办? import static org.junit.Assert.assertThat; import static org.junit.matchers.JUnitMatc
我看到了这个post 关于两者的区别: Matchers.hasItem(..) Assert.assertThat(items, Matchers.hasItem(Matchers.hasToStr
我想使用 Hamcrest 的 hasItems带有一个“实际”集合,即 ArrayList在 assertThat(ArrayList, hasItems(InstanceOfSomeInterfa
Hamcrest 提供了许多匹配器来断言集合的内容。所有这些情况都通过: Collection c = ImmutableList.of("one", "two", "three"); assertT
我是一名优秀的程序员,十分优秀!