我有一个包含多个结构的类:
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(预期,预期)不应该失败。如果你的问题犯了一个错误并且你的意思是Assert.AreEqual(预期,实际)并且您的 HomeControllerHelper.GetNavigationMenuByUserRole 返回一个新的 NavigationMenu 实例,那么对 Assert.AreEqual 的调用将始终失败,因为您的类型 NavigationMenu 是一个类,因此是一个引用类型,即使您将实例的属性设置为相同的值也是如此。
如果两个变量指向相同的引用(也称为 ReferenceEqual),则 Assert.AreEqual 执行相等性检查;如果两个引用包含相同的(属性)值,则不执行相等性检查。
如果类的两个实例相等,您可以重写 NavigationMenu 类的 Equals 方法来提供自定义实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)