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

问题描述 投票:0回答:1

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

java unit-testing junit assert hamcrest
1个回答
1
投票

使用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起可用。

© www.soinside.com 2019 - 2024. All rights reserved.