问题描述
我正在使用这个依赖项:
<dependencies>
<!-- Testing -->
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<exclusions>
<exclusion>
<artifactId>hamcrest-core</artifactId>
<groupId>org.hamcrest</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.9.5</version>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
但是,使用如下函数:
List<String> output = ..;
List<String> data = ...;
Assert.assertthat(output,Matchers.containsInAnyOrder(data));
导致错误。修复 hamcrest 以便该功能真正起作用的正确方法是什么?我试图找出正确的依赖管理,并找到了上面提到的配置。
我收到的错误是断言错误,如果我比较两个相同的列表但使用混洗的值,它不会通过但失败
示例:
List<String> output = Arrays.asList(
"text1\t1","text2\t1","text3\t1","text4\t1","text5\t1","text6\t1","text7\t1","text8\t1","text9\t1","text10\t1"
);
List<String> output1 = Arrays.asList(
"text2\t1","text10\t1","text1\t1"
);
Assert.assertthat(output,Matchers.containsInAnyOrder(output1));
解决方法
问题是 Matchers.containsInAnyOrder
doesn’t have a variant 接受要匹配的项目集合 - 它接受匹配器集合或项目可变参数。在您的情况下,您最终会调用 vararg 变体,因此您实际断言的是 output
是一个列表列表,其中单个元素等于 data
。
有几种方法可以使断言按预期工作:例如,您可以将数据转换为满足可变参数的数组,或者您可以将 data
映射到 {{1} } 匹配器,例如
equalTo