我有测试显示以下 xUnit.net 输出:
[xUnit.net 00:00:07.1166826] Expected: HashSet<License> [Comp.Licensing.Web.Model.License [5d8104ef-f707-4a40-9d68-463bf9f8b0f9], Comp.Licensing.Web.Model.License [d586fc23-bba6-474c-82a2-226484d7fb81]]
[xUnit.net 00:00:07.1172482] Actual: HashSet<License> [Comp.Licensing.Web.Model.License [d586fc23-bba6-474c-82a2-226484d7fb81], Comp.Licensing.Web.Model.License [5d8104ef-f707-4a40-9d68-463bf9f8b0f9]]
我不明白的是为什么这个测试失败了,似乎原因是 HashSet 乱序了。
具体来说,实际似乎与预期完全相同。
实际:
HashSet<L> [Stuff [abc], Stuff [123]]
预期:
HashSet<L> [Stuff [123], Stuff [abc]]
在HashSet的文档上,它说
集合是不包含重复元素的集合,其元素没有特定的顺序。
我的测试是否由未对 HashSet 使用相同的相等性检查的东西运行?
HashSet
不会覆盖Equals
,而是使用object.Equals
,这是引用相等。
HashSet
不保证元素的顺序。
如果您使用的是Assert.Equal
,则集合的顺序很重要。
请改用CollectionAssert.AreEquivalent
.
来源: xUnit : 断言两个列表