为什么测试在 HashSet 比较中失败,元素的顺序似乎很重要



我有测试显示以下 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 : 断言两个列表相等吗?

最新更新