Domanda

Sono nuovo di TDD e xUnit, quindi voglio testare il mio metodo che assomiglia a:

List<T> DeleteElements<T>(this List<T> a, List<T> b);

Esiste un metodo Assert che posso usare? Penso che qualcosa del genere sarebbe bello

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

C'è qualcosa del genere?

È stato utile?

Soluzione

xUnit.Net riconosce le raccolte, quindi devi solo farlo

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

Puoi visualizzare altre asserzioni di raccolta disponibili in CollectionAsserts.cs

Per NUnit i metodi di confronto delle raccolte di librerie sono

CollectionAssert.AreEqual(IEnumerable, IEnumerable) // For sequences, order matters

e

CollectionAssert.AreEquivalent(IEnumerable, IEnumerable) // For sets, order doesn't matter

Maggiori dettagli qui: CollectionAssert

MbUnit ha anche asserzioni di raccolta simili a NUnit: Assert.Collections.cs

Altri suggerimenti

Nella versione corrente di XUnit (1.5) puoi semplicemente usare

  

Assert.Equal (atteso, effettivo);

Il metodo sopra farà un confronto elemento per elemento delle due liste. Non sono sicuro che funzioni per qualsiasi versione precedente.

Con xUnit, se si desidera selezionare le proprietà di ciascun elemento da testare, è possibile utilizzare Assert.Collection.

Assert.Collection(elements, 
  elem1 => Assert.Equal(expect1, elem1.SomeProperty),
  elem2 => { 
     Assert.Equal(expect2, elem2.SomeProperty);
     Assert.True(elem2.TrueProperty);
  });

Questa verifica il conteggio previsto e garantisce che ogni azione sia verificata.

Di recente, stavo usando i pacchetti xUnit 2.4.0 e Moq 4.10.1 nella mia app asp.net core 2.2.

Nel mio caso sono riuscito a farlo funzionare con due passaggi:

  1. Definizione di un'implementazione di IEqualityComparer<T>
  2. Passa l'istanza del comparatore come terzo parametro nel metodo Assert.True :

    Assert.True (previsto, effettivo, nuovo MyEqualityComparer ());

Ma c'è un altro modo migliore per ottenere lo stesso risultato usando il pacchetto FluentAssertions . Ti permette di fare quanto segue:

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

È interessante notare che Assert.Equal () fallisce sempre anche quando ho ordinato gli elementi di due elenchi per ottenerli nello stesso ordine.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top