Assert.Contains 在列表中找不到对象
Assert.Contains doesn't find the object in a list
我是单元测试的新手,我想测试一种方法,该方法获取包含一些名称(如“John,Doe”)的字符串数组,然后用“,”拆分名称并填充列表PersonModel
具有这些名称,因此我希望在返回的列表中有一个名字为 John,姓氏为 Doe 的 PersonModel,但是 Assert.Contains
方法不断抛出此错误:
Assert.Contains() Failure
Not found: PersonModel { FirstName = "John", FullName = "John Doe",
LastName = "Doe" }
In value: List [PersonModel {
FirstName = "John", FullName = "John Doe", LastName = "Doe" },
PersonModel { FirstName = "Jane", FullName = "Jane Doe", LastName =
"Doe" }]
这是DataAccess
class:
中的人名转换方法
public static List<PersonModel> ConvertCsvNamesToPeopleList(string[] csvContent)
{
List<PersonModel> output = new List<PersonModel>();
foreach (string line in csvContent)
{
string[] data = line.Split(',');
output.Add(new PersonModel { FirstName = data[0], LastName = data[1] });
}
return output;
}
这是测试:
[Fact]
public void ConvertCsvNamesToPeopleList_ValidCsvContent_ShouldWork()
{
string[] csvContent = { "John,Doe", "Jane,Doe" };
var expectedPerson = new PersonModel { FirstName = "John", LastName = "Doe" };
var expectedPerson2 = new PersonModel { FirstName = "Jane", LastName = "Doe" };
var actual = DataAccess.ConvertCsvNamesToPeopleList(csvContent);
Assert.Contains(expectedPerson, actual);
Assert.Contains(expectedPerson2, actual);
}
人物模型:
public class PersonModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName => $"{ FirstName } { LastName }";
}
Contains
依赖于找到两个相等的对象,所以你应该覆盖它的 Equals
方法。为了好的措施,你也应该覆盖它的 GetHashCode
方法,这样你就可以在需要时将它用作字典的键:
public override bool Equals(object obj)
{
return obj is PersonModel model &&
FirstName == model.FirstName &&
LastName == model.LastName;
}
public override int GetHashCode()
{
return HashCode.Combine(FirstName, LastName);
}
我是单元测试的新手,我想测试一种方法,该方法获取包含一些名称(如“John,Doe”)的字符串数组,然后用“,”拆分名称并填充列表PersonModel
具有这些名称,因此我希望在返回的列表中有一个名字为 John,姓氏为 Doe 的 PersonModel,但是 Assert.Contains
方法不断抛出此错误:
Assert.Contains() Failure
Not found: PersonModel { FirstName = "John", FullName = "John Doe", LastName = "Doe" }
In value: List [PersonModel { FirstName = "John", FullName = "John Doe", LastName = "Doe" }, PersonModel { FirstName = "Jane", FullName = "Jane Doe", LastName = "Doe" }]
这是DataAccess
class:
public static List<PersonModel> ConvertCsvNamesToPeopleList(string[] csvContent)
{
List<PersonModel> output = new List<PersonModel>();
foreach (string line in csvContent)
{
string[] data = line.Split(',');
output.Add(new PersonModel { FirstName = data[0], LastName = data[1] });
}
return output;
}
这是测试:
[Fact]
public void ConvertCsvNamesToPeopleList_ValidCsvContent_ShouldWork()
{
string[] csvContent = { "John,Doe", "Jane,Doe" };
var expectedPerson = new PersonModel { FirstName = "John", LastName = "Doe" };
var expectedPerson2 = new PersonModel { FirstName = "Jane", LastName = "Doe" };
var actual = DataAccess.ConvertCsvNamesToPeopleList(csvContent);
Assert.Contains(expectedPerson, actual);
Assert.Contains(expectedPerson2, actual);
}
人物模型:
public class PersonModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName => $"{ FirstName } { LastName }";
}
Contains
依赖于找到两个相等的对象,所以你应该覆盖它的 Equals
方法。为了好的措施,你也应该覆盖它的 GetHashCode
方法,这样你就可以在需要时将它用作字典的键:
public override bool Equals(object obj)
{
return obj is PersonModel model &&
FirstName == model.FirstName &&
LastName == model.LastName;
}
public override int GetHashCode()
{
return HashCode.Combine(FirstName, LastName);
}