【发布时间】:2017-06-15 13:06:42
【问题描述】:
我有一个List<List<String>>,其中包含如下示例数据:
("T1#R1", "T1#R1", "T1#R3", "T1#R4")
("T1#R1", "T1#R1", "T1#R3", "T1#R5")
("T1#R1", "T1#R1", "T1#R6", "T1#R4")
("T1#R1", "T1#R1", "T1#R6", "T1#R5")
我需要断言,List<String> 存在于上述示例中,但未考虑顺序。
例如,以下列表 ("T1#R1", "T1#R1", "T1#R4", "T1#R3") 应被视为存在于 List<List<String>> 中,因为它将包含与第一个列表相同的项目,但顺序不同。
另一方面,("T1#R1", "T1#R3", "T1#R4", "T1#R3") 不应被视为存在于列表中,因为它具有相同的项目,但计数不同。
我知道我可以以编程方式执行此操作,但是如果有 Matcher 可以提供帮助,我会徘徊。
我见过这样的断言:
assertThat(myList, containsInAnyOrder(anotherList.toArray())
但这只会将一个列表与另一个列表进行比较,而不是列表列表中的列表。
PS:我用的是Java6,hamcrest-core-1.3,testng-5.14.1
【问题讨论】:
-
我会遍历您的列表,将每个列表包装成
Set以及检查和比较集合的列表,因为没有订单规范 -
我可能需要更改我的示例,因为列表可能包含重复元素,因此 Set 不必计算列表中元素的重复次数。
标签: java assert matcher hamcrest