使用hamcrest检查列表是否按特定顺序包含类的实例

时间:2019-03-14 16:44:29

标签: java unit-testing junit assert hamcrest

嗨,我正在编写一个单元测试,在这里我需要断言一个列表包含特定顺序的多个类的对象。我想使用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实现此功能?

1 个答案:

答案 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开始可用。