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

标签 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 匹配器实现这一点?

最佳答案

使用this method :

public static <E> Matcher<java.lang.Iterable<? extends E>> containsInRelativeOrder(Matcher<? super E>... itemMatchers)

来自文档:

Creates a matcher for Iterables that matches when a single pass over the examined Iterable yields a series of items, that each satisfying the corresponding matcher in the specified matchers, in the same relative order. For example: 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 起可用。

关于java - 使用 hamcrest 检查列表是否包含特定顺序的类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55167914/

相关文章:

java - 在 Java 中绘制密集的 3D 点云(或网格)

java - 编译时由: android. database.sqlite.SQLiteException : near "": syntax error (code 1): ,引起:

unit-testing - 使用 Resharper 7 测试运行程序进行 Jasmine 测试的堆栈跟踪

java - 使用 JUnit 测试 GUI

java - 在 Java 8/jsr310 中格式化持续时间

Java 7 Calendar.getInstance、TimeZone.getTimeZone 同步且速度慢,有什么解决方法吗?

c# - 字符串内容相同但长度不同

node.js - 使用 context.succeed() 的 Node 单元测试 AWS Lambda 函数

java - Groovy 类中 @Rule(JUnit) 声明和赋值的逻辑是什么

java - JSF 支持 Bean 单元测试