gpt4 book ai didi

java - 通过 Hamcrest 断言集合中匹配元素的数量

转载 作者:行者123 更新时间:2023-11-30 06:35:01 25 4
gpt4 key购买 nike

我有一个匹配器集合,例如 List<Matcher<?>> filters和一些元素集合List<Element> elementsToCheck 。我想创建一个断言来检查是否有 x 元素与所有过滤器匹配,如下所示:

public void checkMatch(List<Matcher<?>> filters, int expectedSize){         
MatcherAssert.assertThat(elementsToCheck, ???);
}

我写了这样的东西:

final Iterator<Element> iterator = this.elements.iterator();
final List<Element> filtered = new ArrayList<>();
while (iterator.hasNext()) {
final Element element = iterator.next();
boolean allMatches = true;
for (final Matcher<?> matcher : this.filters) {
if (!matcher.matches(element)) {
allMatches = false;
break;
}
}

if (allMatches) {
filtered.add(element);
}
}

MatcherAssert.assertThat(filtered,
Matchers.hasSize(this.expectedSize));

还有更好的解决办法吗?

最佳答案

可以使用

org.hamcrest.CoreMatchers.allOf 匹配器代替匹配器列表。那么测试可能如下所示(我测试字符串列表作为示例):

// given
Matcher<String> allOfMatcher = allOf(containsString("a"), containsString("b"));
long expectedNumberOfMatches = 2L;

// when
List<String> elementsToCheck = Arrays.asList("aa", "ab", "ba", "bb"); // substitute with some actual method call

// then
assertThat(elementsToCheck, notNullValue());
assertThat(elementsToCheck.stream().filter(allOfMatcher::matches).collect(Collectors.counting()), equalTo(expectedNumberOfMatches));

您甚至可以将现有的匹配器列表传递给以 Iterable 作为参数的 allOf 重载版本。

private Matcher<Element> getAllOfMatcher(List<Matcher<? super Element>> matchers) {
return CoreMatchers.allOf(matchers);
}

关于java - 通过 Hamcrest 断言集合中匹配元素的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45357165/

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