嗨,我正在编写一个单元测试,在这里我需要断言一个列表包含特定顺序的多个类的对象。我想使用hamcrest做到这一点。
现在我要断言-
assertThat(actual, hasItem(isA(A.class)));
assertThat(actual, hasItem(isA(B.class)));
assertThat(actual, hasItem(isA(C.class)));
在这里,我要测试项目是否按A-> B-> C的顺序排列。我试过这样写-
assertThat(actual, contains(isA(A.class), isA(B.class), isA(C.class)));
但是不支持此功能,有没有办法用Hamcrest Matchers实现此功能?
答案 0 :(得分:0)
使用this method:
public static <E> Matcher<java.lang.Iterable<? extends E>> containsInRelativeOrder(Matcher<? super E>... itemMatchers)
从文档中
为Iterables创建一个匹配器,该匹配器在被检查的Iterable上单次通过时会产生一系列项,每个项都以相同的相对顺序满足指定匹配器中的相应匹配器。例如: assertThat(Arrays.asList(“ a”,“ b”,“ c”,“ d”,“ e”),containsInRelativeOrder(equalTo(“ b”),equalTo(“ d”)))
在您的情况下,可能是这样的:
assertThat(actual, containsInRelativeOrder(isA(A.class), isA(B.class), isA(C.class)));
从Hamcrest 2.0.0.0开始可用。