java - 断言列表与 hamcrest 具有相同的对象失败

标签 java junit hamcrest

我有两个列表,我想验证它们是否具有相同顺序的相同对象。由于这个原因,我使用 hamcrest 但由于某种原因我不明白我收到编译错误:

有人可以解释一下这个错误以及如何修复它吗?

List<String> actual = Arrays.asList("asd", "bc", "qwe");
List<String> expected = Arrays.asList("asd", "bc", "qwe");

assertThat(actual,IsIterableContainingInAnyOrder.containsInAnyOrder(expected));

这是错误消息:

com.me.Test.java:[160,1] no suitable method found for 
assertThat(java.util.List<java.lang.String>,org.hamcrest.Matcher<java.lang.Iterable<? 
extends java.util.List<java.lang.String>>>)
method org.junit.Assert.<T>assertThat(T,org.hamcrest.Matcher<T>) is not applicable
(no instance(s) of type variable(s) T exist so that argument type
org.hamcrest.Matcher<java.lang.Iterable<? extends java.util.List<java.lang.String>>> conforms to formal parameter type org.hamcrest.Matcher<T>)
method org.junit.Assert.<T>assertThat(java.lang.String,T,org.hamcrest.Matcher<T>) is not applicable
(cannot instantiate from arguments because actual and formal argument lists differ in length)

最佳答案

看看javadoc of IsIterableContainingInAnyOrder.containsInAnyOrder 。假设您不尝试将 Matcher 传递给此方法,则应该将数组(或可变参数)传递给此方法,例如:

assertThat(actual, IsIterableContainingInAnyOrder.containsInAnyOrder("qwe", "asd", "bc"));

assertThat(actual,IsIterableContainingInAnyOrder.containsInAnyOrder(expected.toArray(new String[expected.size()])));

关于java - 断言列表与 hamcrest 具有相同的对象失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24575016/

相关文章:

java - 无法在测试文件中导入 org.hamcrest.Matchers

java - Mockito stub 方法以返回类的所有实例的值

android - 警告(junit.framework.TestSuite $1): Exception in constructor when executing Android Test by Maven

java - 使用 Java 对 Apache Commons 守护进程进行单元测试

java - JUnit 中检查两个列表是否相同

java - 是否有任何工具使用 hamcrest Factory 注释?

Java Spring : JUnit Hamcrest: Expecting Collection

java - 如何在调用泛型方法时为泛型指定 "type"

java - 使用 Android 应用程序将文件上传到我的 Google API 项目

java - 在java中添加/加载图像