为何CollectionAssert.AreEquivalent在不同类型集合下断言通过?
为什么CollectionAssert.AreEquivalent能通过string和Uri集合的断言?
CollectionAssert.AreEquivalent判断两个集合等价的核心逻辑是:两个集合元素数量相同,且每个集合中的任意元素,在另一个集合中都能找到被Object.Equals静态方法判定为相等的元素。
在你的测试代码中,关键在于Object.Equals("turn:foo.com", new Uri("turn:foo.com"))的判定结果为true:
Object.Equals静态方法会先调用字符串实例的Equals方法,由于传入的参数是Uri类型,字符串的Equals方法因类型不匹配返回false;- 接着方法会调用Uri实例的
Equals方法,Uri类重写了该方法,会将传入的字符串解析为Uri实例后与自身比较,结果为true; - 因此
Object.Equals最终返回true。
由于两个集合的元素数量都是1,且唯一的元素被Object.Equals判定为相等,所以CollectionAssert.AreEquivalent断言通过。
内容的提问来源于stack exchange,提问作者Milan Dala
相关产品推荐
相关产品推荐

