为什么<object,object =“”>上的Assert.AreEqual失败?输入不匹配?</object,>

时间:2013-11-07 23:19:29

标签: c# .net unit-testing mstest assert

我正在尝试在测试中使用Assert.AreEqual来验证来自我们提供商的DTO。

断言失败了:

  

预期:DTO.EmployeeDTO

     

实际: DataProviders.Mappers.EmployeeMapper

我可以使用我们的DTO和/或映射器让AreEqual工作吗?我应该覆盖DTO的Equals并改为使用Assert.Equal吗?

以下是我们预期的员工DTO进行比较:

EmployeeDTO expected = new EmployeeDTO
{
    Category = "OPS", 
    Code = "EMPL",
    Email = "bill.gates@microsoft.com",
    JobDescription = "Philanthropist",
    FirstName = "Bill",
    Bolander = "Gates",
    ResourceID = 1234567,
    ResourceNumber = "ABCD1234567",
    UserGUID = Guid.Parse("0A76A348-B709-9EF0-9E44-419433E7C90D"),
    UserName = "billygates"
};

以下是来自数据提供商的电话,我们应该返回EmployeeDTO,我们可以将其与预期的DTO进行比较。

 EmployeeDTO actual = controller.GetEmployee("billygates");

以下是应该返回员工DTO的GetEmployee提供商方法:

public EmployeeDTO GetEmployee(string userName)
{
    EmployeeDTO toReturn = null;

    //Get employee   
    toReturn = (from employees in Context.EmployeeTable
       where employees.UserName.Equals(userName)
       select new EmployeeMapper
       {
        MapToFullDTO = employees
       }
       ).SingleOrDefault<EmployeeDTO>();
}

请注意,MapToFullDTO属性是名为EmployeeMapper的类的一部分,该类继承自EmployeeDTO。为了方便起见,此属性填充基类的属性,因此我们不必每次都写出映射。我知道这是问题的一部分,但我不确定原因。

1 个答案:

答案 0 :(得分:6)

您需要覆盖类上的Equals()方法,以根据属性的值比较对象。

否则,比较将比较显然不同的对象的引用。