为什么Assert.AreEqual(T OBJ1,TOBJ2)失败,相同的对象 [英] Why does Assert.AreEqual(T obj1, Tobj2) fail with identical objects

查看:544
本文介绍了为什么Assert.AreEqual(T OBJ1,TOBJ2)失败,相同的对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有包含几个结构类:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆