[英]How do i mock a list of Key,Value pairs (in angular) which does not have indices?
[英]How do I confirm that two ImmutableMaps have the exact same (key,value) pairs in them?
我需要进行单元测试。 被测试的方法返回一个ImmutbaleMap,我需要能够将其与已有的方法进行比较。 一种方法是获取两个(keySets())的键集,遍历它们并比较从两个映射返回的这些键的值。 但是,对我来说,这似乎效率不高。 有没有更好/更好的方法来做到这一点?
如果键和值均正确实现equals()
,则可以简单地使用Map.equals()
:
比较指定对象与此映射是否相等。 如果给定对象也是一个映射并且两个映射表示相同的映射,则返回
true
。 更正式地说,如果m1.entrySet().equals(m2.entrySet())
,则两个映射m1
和m2
表示相同的映射。 这样可确保equals
方法可在Map
接口的不同实现中正常工作。
如果他们不这样做,我怀疑您会发现一个开箱即用的单线纸。 我希望您必须自己进行比较。 这并不难:
可以很容易地将其封装到一个辅助函数中,也许可以通过值比较器对其进行参数设置。
另一个选择是使用普通Map,编写等效的实现,并使用Maps
类中的以下difference
方法
MapDifference<K,V> difference(Map<? extends K,? extends V> left,
Map<? extends K,? extends V> right,
Equivalence<? super V> valueEquivalence)
我更喜欢这种方式,因为它不会更改Map类型(不会只是为了计算差异或检查相等性而这样做)。
为什么map1.entrySet().equals(map2.entrySet())
不起作用? EntrySet.equals()
方法引用Map.contains()
方法,无论值是否实现equals()
(在这种情况下,您可能都有一个IdentityHashMap作为基础),该方法都应该对您的值起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.