java - hamcrest containsInAnyOrder 仅适用于特定订单

标签 java collections junit hamcrest

我正在尝试进行测试以检查某个列表是否包含项目,而我不关心顺序。
我希望能够做到这一点的方法是测试该项目是否具有具有特定值的特定属性。

我用以下代码隔离了 senario:

我正在使用的类:

public class A {
    private String propA;

    public A (final String propA) {
        this.propA = propA;
    }

    public String getPropA() {
        return propA;
    }

    public void setPropA(final String propA) {
        this.propA = propA;
    }
}

测试类

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.beans.HasPropertyWithValue.hasProperty;
import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

public class HamcrestCollectionTest {
    @Test
    public void testContainsInAnyOrder() {
        List<A> list = new ArrayList<A>();

        list.add(new A("a"));
        list.add(new A("b"));

        assertThat(list, containsInAnyOrder(hasProperty("propA", equalTo("b")), hasProperty("propA", equalTo("a"))));
    }
}

这个测试失败了。如果我在 countainsInAnyOrder 中切换列表的值,那么这有效。这不是我对“containsInAnyOrder”的期望。

正确的做法是什么?
或者有没有办法检查各个值是否存在?

最佳答案

我发现了问题所在。确实是 hamcrest 类的一个版本导致了这个问题。

采取的步骤:

  1. 更新了 ma​​ven-dependency-plugin
    的版本
  2. 将我的 mockito 依赖项从 mockito-all 更改为 mockito-core
    • 原因:
      • mockito-all 依赖项直接包含 org.hamcrest.Matcher 类的一个版本。
      • 当您查看加载的依赖项时,这并不是简单可见的(因为它在 mockito-all jar 本身中,而不是在 jar 的依赖项中。
  3. 在 dependencyManagement 中将 hamcrest-core 的版本设置为 1.3
    • 原因:
      • mockito-core 依赖于 hamcrest-core 但使用版本 1.1
      • hamcrest-coremockito-core 版本优先于 hamcrest-corejunit 版本> 依赖。

所以基本上这是使用 mockito-all 引起的冲突。

关于java - hamcrest containsInAnyOrder 仅适用于特定订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24776185/

相关文章:

java - 一种跳过Java子字符串中开始和结束字符索引的方法?

javascript - 在 Javascript 中测试集合成员资格的运算符

java - 从 guava (google) 中删除 Multimap 永远不会删除 key 本身。为什么?怎么做?

arrays - VBA:变体数组与类型数组与非键控集合的迭代速度

java - 在单元测试中反射(reflection)以检查代码覆盖率

java - Spring Boot中多字段搜索并实现分页

java - 为什么当我们向输入字段输入内容时,PhantomJS 只输入最后一个字母?

java - 在 java 中处理按键(全局)

java - 无法在单元测试的 Before 和 After 方法中启动/停止 Spark

java - 如何为具有多个可调用语句的执行器服务编写 Junit 测试用例