gpt4 book ai didi

c# - 为什么 Assert.AreEqual(T obj1, Tobj2) 会因相同的对象而失败

转载 作者:太空狗 更新时间:2023-10-29 18:23:13 26 4
gpt4 key购买 nike

我有一个包含多个结构的类:

public class NavigationMenu
{
public struct NavigationMenuItem
{
public bool Enabled { get; set; }
public int NumberOfPendingOperations { get; set; }
}

public NavigationMenuItem SubmitExpenses { get; set; }
public NavigationMenuItem ManageExpenses { get; set; }
public NavigationMenuItem SubmitBudgets { get; set; }
public NavigationMenuItem ManageBudgets { get; set; }
public NavigationMenuItem AuthorizeExpenses { get; set; }
public NavigationMenuItem ApproveExpenses { get; set; }
public NavigationMenuItem PayExpenses { get; set; }
public NavigationMenuItem BillExpenses { get; set; }
public NavigationMenuItem ManageReturnedExpenses { get; set; }
public NavigationMenuItem ManageIncompleteExpenses { get; set; }
public NavigationMenuItem ManageOrders { get; set; }
public NavigationMenuItem ApproveBudgets { get; set; }
public NavigationMenuItem AdministrateSystem { get; set; }
}

在单元测试中,我调用函数并比较结果:

NavigationMenu expected = new NavigationMenu();
expected.SubmitExpenses = new NavigationMenu.NavigationMenuItem { Enabled = true };
expected.ManageExpenses = new NavigationMenu.NavigationMenuItem { Enabled = true };

NavigationMenu actual = HomeControllerHelper.GetNavigationMenuByUserRole(userRole);

Assert.AreEqual(expected, actual);

但是 Assert.AreEqual 总是抛出 AssertFailedException。对象是相同的,我已经使用调试器验证了这一点。请分享任何想法。谢谢。

最佳答案

Assert.AreEqual(expected, expected) 调用不应失败。如果您在问题中犯了错误并且您的意思是 Assert.AreEqual(expected, actual) 并且您的 HomeControllerHelper.GetNavigationMenuByUserRole 返回了 NavigationMenu 的新实例,那么对 Assert.AreEqual 的调用总是会失败,原因您的类型 NavigationMenu 是一个类,因此是一个引用类型,即使您将实例的属性设置为相同的值也是如此。

如果两个变量指向相同的引用(也称为 ReferenceEqual)而不是如果两个引用包含相同的(属性)值,则 Assert.AreEqual 执行相等性检查。

如果您的类的两个实例相等,您可以覆盖 NavigationMenu 类的 Equals 方法以提供自定义实现。

关于c# - 为什么 Assert.AreEqual(T obj1, Tobj2) 会因相同的对象而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7793065/

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