Question

Je suis nouveau dans TDD et xUnit, je souhaite donc 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 puisse utiliser? Je pense que quelque chose comme ça serait bien

    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?

Était-ce utile?

La solution

xUnit.Net reconnaît les collections, il vous suffit donc de le faire

.
Assert.Equal(expected, actual); // Order is important

Vous pouvez voir d'autres assertions de collection disponibles dans CollectionAsserts.cs

Pour les 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 contient également des assertions de collection similaires à NUnit: Assert.Collections.cs

Autres conseils

Dans la version actuelle de XUnit (1.5), vous pouvez simplement utiliser

  

Assert.Equal (prévu, réel);

La méthode ci-dessus effectue une comparaison élément par élément des deux listes. Je ne suis pas sûr que cela fonctionne pour les versions précédentes.

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);
  });

Ceci 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:

  1. Définition d'une implémentation de IEqualityComparer < T >
  2. Passez l'instance de comparateur en tant que troisième paramètre dans la méthode Assert.True :

    Assert.True (attendu, actuel, nouveau MyEqualityComparer ());

Mais il existe un autre moyen plus efficace d'obtenir le même résultat en utilisant le package FluentAssertions . Cela vous permet d'effectuer les opérations suivantes:

// Assert          
expected.Should().BeEquivalentTo(actual));

Fait intéressant, Assert.Equal () échoue toujours même lorsque j'ai commandé les éléments de deux listes pour les obtenir dans le même ordre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top