嗨我正在编写一个单元测试,我需要声明一个列表包含特定顺序的多个类的对象。我想用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实现这一目标?
使用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起可用。