Nar*_*rek 8 c# nunit unit-testing
我有一个包含几个结构的类:
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; }
}
Run Code Online (Sandbox Code Playgroud)
在单元测试中,我进行函数调用并比较结果:
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);
Run Code Online (Sandbox Code Playgroud)
但是Assert.AreEqual总是抛出AssertFailedException.对象是相同的,我已经使用调试器验证了这一点.请分享任何想法.谢谢.
调用Assert.AreEqual(预期,预期)不应该失败.如果你在你的问题中犯了错误并且你的意思是Assert.AreEqual(期望的,实际的)和你的HomeControllerHelper.GetNavigationMenuByUserRole返回一个新的NavigationMenu实例,那么对Assert.AreEqual的调用总是会失败,导致你的类型NavigationMenu是一个类,因此,即使您将实例的属性设置为相同的值,也是引用类型.
Assert.AreEqual执行相等性检查,如果两个变量指向相同的引用(aka.ReferenceEqual),而不是两个引用包含相同(属性)值.
如果类的两个实例相等,则可以覆盖NavigationMenu类的Equals方法以提供自定义实现.
归档时间: |
|
查看次数: |
3872 次 |
最近记录: |