gpt4 book ai didi

java - 将空集合与 Hamcrest 的 hasItem() 相匹配

转载 作者:行者123 更新时间:2023-11-30 04:40:59 25 4
gpt4 key购买 nike

如何使用 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)在这种情况下测试失败,并且是用于空集合的错误匹配器。

这里有两种解决方法:

  1. 更改数据提供程序和测试以采用包括 hasItem 的完整匹配器。对于上述情况,您将通过 emptyIterable 。缺点是您需要告诉 Java 编译器应该使用哪种泛型类型,这会使测试变得困惑。

  2. 创建第二个测试来处理生成空集合的数据集。

关于java - 将空集合与 Hamcrest 的 hasItem() 相匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12312117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com