我是單元測驗的新手,我想測驗一種方法,該方法獲取一個字串陣列,該陣列包含一些名稱,例如“John,Doe”,然后將名稱按“,”拆分,并PersonModel使用這些名稱填充串列,所以我希望在回傳的串列中有一個名字為約翰,姓氏為 Doe 的 PersonModel,但該Assert.Contains方法不斷拋出此錯誤:
Assert.Contains() 失敗
未找到:PersonModel { FirstName = "John", FullName = "John Doe", LastName = "Doe" }
在值中:串列 [PersonModel { FirstName = "John", FullName = "John Doe", LastName = "Doe" }, PersonModel { FirstName = "Jane", FullName = "Jane Doe", LastName = "Doe" }]
這是將名稱轉換為DataAccess類中人員串列的方法:
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 }";
}
uj5u.com熱心網友回復:
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);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/389704.html
