Questions Xunit.Affirmer.Collection - C#
Je vais avoir une Bibliothèque de Classe, il contient le Modèle et la Méthode
Modèle:
public class Employee {
public int EmpId { get; set; }
public string Name { get; set; }
}
Méthode:
public class EmployeeService {
public List<Employee> GetEmployee() {
return new List<Employee>() {
new Employee() { EmpId = 1, Name = "John" },
new Employee() { EmpId = 2, Name = "Albert John" },
new Employee() { EmpId = 3, Name = "Emma" },
}.Where(m => m.Name.Contains("John")).ToList();
}
}
J'ai une Méthode de Test
[TestMethod()]
public void GetEmployeeTest() {
EmployeeService obj = new EmployeeService();
var result = obj.GetEmployee();
Xunit.Assert.Collection<Employee>(result, m => Xunit.Assert.Contains("John",m.Name));
}
J'ai reçu un message de l'Exception
Assert.Collection() Failure
Collection: [Employee { EmpId = 1, Name = "John" }, Employee { EmpId = 2, Name = "Albert John" }]
Expected item count: 1
Actual item count: 2
Mon obligation est de vérifier tous les items.Name
doit contenir la sous-chaîne "John". De bien vouloir m'aider comment faire pour vérifier à l'aide de Xunit.Assert.Collection
Vous devez vous connecter pour publier un commentaire.
Il apparaît que de l'Affirmer.Collection utilise chaque élément de l'inspecteur de la fois. Donc, pour ton test, les ouvrages suivants:
Si la séquence
result
a exactement deux éléments:Si il y a de nombreux éléments, la modification de la
Assert
àdevrait vous donner le résultat que vous attendez.
C'est une expansion sur Ayb4btu de réponse pour ceux qui ne sont pas intéressés dans l'ordre des éléments dans la collection.
La méthode suivante est basée sur l'original XUnit mise en œuvre, et vous permettra de tester à l'aide d'une interface très similaire:
La différence ici est que, pour une collection
À la fois les lignes suivantes ne produira pas une
CollectionException
Tandis que l'utilisation de
Assert.Collection
Seule la première des deux lignes ci-dessus va travailler dans la collection des inspecteurs est évaluée dans l'ordre.Il y a un impact potentiel sur les performances à l'aide de cette méthode, mais si vous ne l'tests d'assez petite taille des collections (comme vous l'avez probablement dans un test unitaire), jamais vous ne verrez la différence.
class TestData { public string FirstName {get;set;} }
etAssert.Collection(new List<TestData>() { new TestData() { FirstName = "Bob" } }, item => Assert.Contains("Bob", item.FirstName);
ne compile pasTestExpect.CollectionContainsOnlyExpectedElements(new List<TestData>() { new TestData() {FirstName = "Bob"}}, x => "Bob".Equals(x.FirstName));
au lieu deAssert.Collection.....