c# - 比较单元测试中的两个列表
问题描述
我有两个列表,其中包含两个用户对象。
列表中的对象的值相同。
但是当我检查这个列表时,单元测试返回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);
}
解决方案
我认为您需要为您的课程覆盖==
运算符或Equals()
方法User
。
public class User
{
public string Name { get; set; }
public string Password { get; set; }
public override bool Equals(object obj)
{
if (obj is User another)
{
return Name == another.Name && Password == another.Password;
}
return base.Equals(obj);
}
public static bool operator ==(User left, User right)
{
return left.Equals(right);
}
public static bool operator !=(User left, User right)
{
return !left.Equals(right);
}
}
推荐阅读
- spring-boot - 拦截器和全局异常处理
- r - 仅在一个带有相应图例的多面图上添加第二个 geom_layer
- java - 每个页面加载的所有包都加载 React + Java
- authentication - 如何向 Azure 工业物联网平台验证 NestJS API?
- php - 如何创建 wordpress 详细信息页面?
- ios - 修改拉动以快速刷新
- c++ - 如何读取 ascii stl 文件以将其打印到文件中?
- python - 为什么在这种情况下 Kolmogorov-Smirnov 检验会失败?
- bash - 尽管需要,但 bash 脚本不保存输出文件
- xgettext - xgettext 关键字匹配覆盖方法