我正在尝试在测试中使用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
。为了方便起见,此属性填充基类的属性,因此我们不必每次都写出映射。我知道这是问题的一部分,但我不确定原因。
答案 0 :(得分:6)
您需要覆盖类上的Equals()
方法,以根据属性的值比较对象。
否则,比较将比较显然不同的对象的引用。