gpt4 book ai didi

c# - MVC SelectListItem 不实现等于吗?

转载 作者:太空狗 更新时间:2023-10-30 01:24:30 32 4
gpt4 key购买 nike

忙于为 Controller 编写单元测试,该 Controller 生成一个 View 模型,其中包含一个选项列表,如 IEnumerable < SelectListItem >。我尝试检查预期列表是否包含 View 模型中的所有列表,反之亦然。令我惊讶的是,这总是错误的。所以我创建了以下测试:

[TestMethod]
public void CanEqual()
{
var x = new SelectListItem {Selected = false, Text = "A", Value = "A"};
var y = new SelectListItem { Selected = false, Text = "A", Value = "A" };
Assert.AreEqual(x, y);
}

断言总是失败,但两者是相等的。 SelectListItem 真的没有实现 Equals 还是我只是在这里遗漏了什么?

最佳答案

添加到 Shark 的回答中...至于如何处理它,除了实现 IEquatable<T>在派生类上(如果你这样做,你真的应该也覆盖非泛型 Equals() - 如果你这样做那个,你真的应该覆盖 GetHashCode() )......无论如何。 .. 除了这样做,您还可以:

  1. 在您的测试项目中创建一个辅助方法来进行值比较(可以使用适用于大多数简单类的反射编写通用方法),或者
  2. 制作一个辅助类来实现IEqualityComparer<T>对于您需要比较的每种类型。

两者都不允许您使用 Assert.AreEqual() ,但总的来说,我不赞成将代码添加到您的对象中只是为了允许测试 - 更喜欢将其保留在测试项目中。另外,使用这些方法,您将“不需要”实现 GetHashCode()

关于c# - MVC SelectListItem 不实现等于吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9122241/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com