我想使用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())));