gpt4 book ai didi

java - 滥用 hamcrest hasItems

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:17:38 25 4
gpt4 key购买 nike

我有一个整数列表(当前),我想检查这个列表是否包含预期列表中的所有元素,甚至不包含列表 notExpected 中的一个元素,所以代码如下:

    List<Integer> expected= new ArrayList<Integer>();
expected.add(1);
expected.add(2);

List<Integer> notExpected = new ArrayList<Integer>();
notExpected.add(3);
notExpected.add(4);

List<Integer> current = new ArrayList<Integer>();
current.add(1);
current.add(2);


assertThat(current, not(hasItems(notExpected.toArray(new Integer[expected.size()]))));

assertThat(current, (hasItems(expected.toArray(new Integer[expected.size()]))));

这么久了。但是当我添加

    current.add(3);

测试也是绿色的。我是否滥用了 hamcrest 匹配器?顺便说一句。

    for (Integer i : notExpected)
assertThat(current, not(hasItem(i)));

给了我正确的答案,但我认为我可以很容易地使用 hamcrest 匹配器来解决这个问题。我正在使用 junit 4.11 和 hamcrest 1.3

最佳答案

hasItems(notExpected...) 只会匹配 current 如果来自 notExpected 的所有元素也在 current >。所以用线

assertThat(current, not(hasItems(notExpected...)));

您断言 current 不包含 notExpected 中的所有元素

断言 current 不包含来自 notExpected任何元素 的一种解决方案:

assertThat(current, everyItem(not(isIn(notExpected))));

然后您甚至不必将列表转换为数组。这种变体可能更具可读性,但需要转换为数组:

assertThat(current, everyItem(not(isOneOf(notExpected...))));

请注意,这些匹配器并非来自 hamcrest-core 中的 CoreMatchers,因此您需要添加对 hamcrest-library 的依赖。

<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.3</version>
</dependency>

关于java - 滥用 hamcrest hasItems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14932363/

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