【发布时间】:2022-01-05 07:32:28
【问题描述】:
XUnit 新手并尝试测试以下方法,但测试失败。 我相信原因是在调用断言时创建了一个新的数据实例。 所以即使认为结果与对象引用相同。
当向集合中添加新记录时,它应该返回添加的相同记录。
员工数据类:
public class EmployeeData
{
public int Id { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public string Title { get; set; }
}
测试方法:
public List<EmployeeData> Add(List<EmployeeData> employees)
{
foreach(var employee in employees)
{
data.Add(new EmployeeData() { Id = newId(),
FirstName = employee.FirstName, LastName = employee.LastName,
Title = employee.Title });
}
return data;
}
测试方法:
[Fact]
public void Add()
{
// Arrange
var data = new List<EmployeeData>();
data.Add(new EmployeeData() { Id = 1, FirstName = "Adams", LastName = "John", Title = "Fireman" });
// Mocking the employee class constructor arguments.
var mockLogging = new Mock<ILogger<DataService>>();
var mockConfig = new Mock<IConfiguration>();
var sut = new Employee(mockLogging.Object, mockConfig.Object);
var result = sut.Add(data);
// Assert should return the exact data inputted
Assert.Equal(result, data);
}
测试结果:
Message:
Assert.Equal() Failure
Expected: List<EmployeeData> [EmployeeData { FirstName = "Adams", Id = 1, LastName = "John", Title = "Fireman" }]
Actual: List<EmployeeData> [EmployeeData { FirstName = "Adams", Id = 1, LastName = "John", Title = "Fireman" }]
【问题讨论】:
-
你能用
CollectionAssert.AreEquivalent()吗? -
@SteveWong 这不适用于 XUnit。
-
您是否尝试过覆盖
EmployeeData类中的Equals和GetHashCode方法? -
Add方法中没有看到要声明的数据变量?
-
结果为真。因为值相同,但它们的引用彼此不同。你可以试试这个 Enumerable.SequenceEqual(list1, list2) -> docs.microsoft.com/en-us/dotnet/api/…