Je suis nouveau sur TDD et xUnit donc je veux tester ma méthode qui ressemble à quelque chose comme:
List<T> DeleteElements<T>(this List<T> a, List<T> b);
Existe-t-il une méthode Assert que je peux utiliser? Je pense que quelque chose comme ça serait sympa
List<int> values = new List<int>() { 1, 2, 3 };
List<int> expected = new List<int>() { 1 };
List<int> actual = values.DeleteElements(new List<int>() { 2, 3 });
Assert.Exact(expected, actual);
Y a-t-il quelque chose comme ça?
xUnit.Net reconnaît les collections, il vous suffit donc de faire
Assert.Equal(expected, actual); // Order is important
Vous pouvez voir d'autres assertions de collection disponibles dans CollectionAsserts.cs
Pour NUnit les méthodes de comparaison des collections de bibliothèques sont
CollectionAssert.AreEqual(IEnumerable, IEnumerable) // For sequences, order matters
et
CollectionAssert.AreEquivalent(IEnumerable, IEnumerable) // For sets, order doesn't matter
Plus de détails ici: CollectionAssert
MbUnit a également des assertions de collection similaires à NUnit: Assert.Collections.cs
Dans la version actuelle de XUnit (1.5), vous pouvez simplement utiliser
Assert.Equal (attendu, réel);
La méthode ci-dessus fera une comparaison élément par élément des deux listes. Je ne sais pas si cela fonctionne pour une version antérieure.
Avec xUnit, si vous souhaitez sélectionner les propriétés de chaque élément à tester, vous pouvez utiliser Assert.Collection.
Assert.Collection(elements,
elem1 => Assert.Equal(expect1, elem1.SomeProperty),
elem2 => {
Assert.Equal(expect2, elem2.SomeProperty);
Assert.True(elem2.TrueProperty);
});
Cela teste le nombre attendu et garantit que chaque action est vérifiée.
Récemment, j'utilisais les packages xUnit 2.4.0
Et Moq 4.10.1
Dans mon application asp.net core 2.2.
Dans mon cas, j'ai réussi à le faire fonctionner en deux étapes:
IEqualityComparer<T>
Passez l'instance de comparateur en tant que troisième paramètre dans la méthode Assert.True
:
Assert.True(expected, actual, new MyEqualityComparer());
Mais il existe une autre façon plus agréable d'obtenir le même résultat en utilisant le package FluentAssertions . Il vous permet d'effectuer les opérations suivantes:
// Assert
expected.Should().BeEquivalentTo(actual));
Il est intéressant de noter que Assert.Equal()
échoue toujours même lorsque j'ai ordonné les éléments de deux listes pour les obtenir dans le même ordre.