3

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

断言失败:

预期: DTO.EmployeeDTO

实际: DataProviders.Mappers.EmployeeMapper

我可以用我们的 DTO 和/或映射器做些什么来开始AreEqual工作吗?我应该覆盖EqualsDTO 并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");

这是GetEmployee应该返回员工 DTO 的提供程序方法:

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. 为了方便起见,此属性填充基类的属性,因此我们不必每次都写出映射。我知道这是问题的一部分,但我不知道为什么。

4

1 回答 1

6

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

否则比较会比较明显不同的对象的引用。

于 2013-11-07T23:25:24.097 回答