【发布时间】:2026-01-05 02:40:01
【问题描述】:
我有两个列表,其中包含两个用户对象。
列表中的对象的值相同。
但是当我检查这个列表时,单元测试返回 CollectionAssert.AreEqual 失败。 (索引 0 处的元素不匹配)。
我认为CollectionAssert.AreEqual 方法不会检查列表中的值,而是检查引用。
我的问题是如何比较单元测试中的两个列表的价值?
public class User
{
public string Name { get; set; }
public string Password { get; set; }
}
[TestMethod]
public void CheckUserList()
{
List<User> users = new List<User>()
{
new User(){ Name="Name", Password="Pass" },
new User(){ Name="Name1", Password="Pass1" },
new User(){ Name="Name2", Password="Pass2" },
};
List<User> users1 = new List<User>()
{
new User(){ Name="Name", Password="Pass" },
new User(){ Name="Name1", Password="Pass1" },
new User(){ Name="Name2", Password="Pass2" },
};
CollectionAssert.AreEqual(users, users1);
}
【问题讨论】:
-
#1 覆盖
User.Equals()#2users.SequenceEquals(users1) -
您需要覆盖 User 类中的 Equals 和 GetHashCode,或者提供 IComparer 的实现以传递给 CollectionAssert.AreEqual 的重载
-
感谢 fubo 和 Anthony Pegram 覆盖 Equals 和 GetHashCode 就足够了。
标签: c# unit-testing collections