Ho nella mia suite di test un test che va più o meno così:
[Fact]
public void VerifySomeStuff()
{
var stuffCollection = GetSomeStuff();
Assert.Equal(1, stuffCollection.Count());
}
Questo test funziona come previsto, ma quando lo eseguo xUnit stampa un avviso:
avviso xUnit2013: non utilizzare Assert.Equal () per verificare la dimensione della raccolta.
Tuttavia, nell'avviso non viene suggerita alcuna alternativa e una ricerca su Google mi porta al codice sorgente in xUnit per il test che verifica che questo avviso sia stampato.
Se Assert.Equal()
non è il modo corretto per verificare la lunghezza di una raccolta, qual è?
Per chiarire: mi rendo conto che potrei "indurre" xUnit a non emettere questo avviso, ad esempio estraendo una variabile o usando Assert.True(stuff.Count() == 1)
invece. Quest'ultimo è solo hacky, e il primo sembra che se xUnit stesse ad esempio cercando di evitare più iterazioni di un IEnumerable<T>
, allora questo è il modo sbagliato di andare (perché riceverò suggerimenti per il compilatore separatamente se si tratta di un problema) e xUnit stesso non dovrebbe mai dover valutare l'input più di una volta (infatti probabilmente otterrà lo stesso input indipendentemente dall'estrazione delle variabili, a causa di come funziona la chiamata di funzione C #).
Quindi, non sono solo interessato a rimuovere quell'avvertimento dal mio output. Una risposta alla mia domanda spiega anche perché quell'avvertimento è incluso nella libreria in primo luogo e perché qualunque approccio dovrei usare invece è migliore.
stuffCollection.Count()
in una variabile separata e la passi all'assert ti dà lo stesso errore?