为什么Assert.AreEqual(T OBJ1,TOBJ2)失败,相同的对象 [英] Why does Assert.AreEqual(T obj1, Tobj2) fail with identical objects
问题描述
我有包含几个结构类:
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; }
}
在单元测试中我做一个函数调用,并比较结果:
In a unit test I make a function call and compare the results:
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。对象是相同的,我已经验证了这一点使用调试器。请分享任何想法。谢谢你。
But the Assert.AreEqual always throws AssertFailedException. The objects are identical, I've verified this using debugger. Please share any ideas. Thanks.
推荐答案
调用 Assert.AreEqual(预期,预期)应该不会失败。如果你在你的问题犯了一个错误,你的意思的 Assert.AreEqual(预期,实际值)并您HomeControllerHelper.GetNavigationMenuByUserRole返回NavigationMenu的新实例,然后将调用Assert.AreEqual总是失败,原因你的类型NavigationMenu是一个类,因此引用类型,即使你设置实例相同的值的属性。
The call Assert.AreEqual(expected, expected) should not fail. If you made a mistake in your question and you meant Assert.AreEqual(expected, actual) and your HomeControllerHelper.GetNavigationMenuByUserRole returns a new instance of NavigationMenu, then will the call to Assert.AreEqual always fail, cause your type NavigationMenu is a class and therefore a reference type, even if you set the properties of the instances to the same values.
Assert.AreEqual进行相等性检查,如果两个变量指向同一个参考(亦称ReferenceEqual),而不是如果两个引用包含相同的(属性)值。
Assert.AreEqual performs an equality check if the two variables point to the same reference (aka. ReferenceEqual) and not if the two references contain the same (property) values.
您可以覆盖你的NavigationMenu的Equals方法类,以提供一个自定义实现,如果你的类的两个实例都是平等的。
You could override the Equals method of your NavigationMenu class to provide a custom implementation if two instances of your class are equal.
这篇关于为什么Assert.AreEqual(T OBJ1,TOBJ2)失败,相同的对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!