我想使用hamcrest断言两个映射是相等的,即它们具有指向相同值的相同键集。

我目前的最佳猜测是:

assertThat( affA.entrySet(), hasItems( affB.entrySet() );

这使:



我还研究了containsAll的变体,以及hamcrest软件包提供的其他变体。谁能指出我正确的方向?还是我必须编写一个自定义匹配器?

最佳答案

我想出的最短方法是两个声明:

assertThat( affA.entrySet(), everyItem(isIn(affB.entrySet())));
assertThat( affB.entrySet(), everyItem(isIn(affA.entrySet())));
但是您也可以这样做:
assertThat(affA.entrySet(), equalTo(affB.entrySet()));
取决于 map 的实现方式,并牺牲差异报告的清晰度:这只会告诉您存在差异,而上面的语句也会告诉您哪一个。
更新:实际上有一条语句与集合类型无关:
assertThat(affA.entrySet(), both(everyItem(isIn(affB.entrySet()))).and(containsInAnyOrder(affB.entrySet())));

10-07 16:41