Ich habe in meiner Testsuite einen Test, der ungefähr so aussieht:
[Fact]
public void VerifySomeStuff()
{
var stuffCollection = GetSomeStuff();
Assert.Equal(1, stuffCollection.Count());
}
Dieser Test funktioniert wie erwartet, aber wenn ich ihn ausführe, gibt xUnit eine Warnung aus:
Warnung xUnit2013: Verwenden Sie Assert.Equal () nicht, um die Sammlungsgröße zu überprüfen.
In der Warnung wird jedoch keine Alternative vorgeschlagen, und eine Google-Suche führt mich zum Quellcode in xUnit, um zu testen, ob diese Warnung gedruckt wurde.
Wenn dies Assert.Equal()
nicht der richtige Weg ist, um die Länge einer Sammlung zu überprüfen, was ist das?
Zur Verdeutlichung: Mir ist klar, dass ich xUnit dazu bringen könnte, diese Warnung nicht auszugeben, indem ich z. B. eine Variable extrahiere oder Assert.True(stuff.Count() == 1)
stattdessen verwende. Letzteres ist nur hackig, und Ersteres scheint, wenn xUnit beispielsweise versucht, mehrere Iterationen von a zu vermeiden IEnumerable<T>
, dann ist dies der falsche Weg (da ich Compiler-Hinweise dazu separat bekomme, wenn es sich um ein Problem handelt) und xUnit selbst sollte die Eingabe niemals mehr als einmal auswerten müssen (tatsächlich wird sie wahrscheinlich unabhängig von der Variablenextraktion dieselbe Eingabe erhalten, da der Aufruf von C # -Funktionen funktioniert).
Ich bin also nicht nur daran interessiert, diese Warnung aus meiner Ausgabe zu entfernen. Eine Antwort auf meine Frage erklärt auch, warum diese Warnung überhaupt in der Bibliothek enthalten ist und warum jeder Ansatz, den ich stattdessen verwenden sollte, besser ist.
stuffCollection.Count()
in einer separaten Variablen speichern und diese an den Assert übergeben, erhalten Sie denselben Fehler?Antworten:
Xunit bietet schnelle Korrekturen für die meisten seiner Warnungen, sodass Sie sehen können, was es für "richtig" hält.
In Ihrem Fall möchten Sie, dass Sie verwenden,
Assert.Single
da Sie genau einen Artikel erwarten. Wenn Sie eine beliebige Zahl wie 412 angeben, erhalten Sie keine Warnung zur VerwendungCount
. Es wird nur empfohlen, zu verwenden,Single
wenn Sie einen Artikel erwarten oderEmpty
wenn Sie keine Artikel erwarten.quelle
Empty
,Single
undNotEmpty
- wenn Sie einen dynamischen Wert xUnit2013 sollte nicht Trigger erwarten.Ich fand dies geben mir den gleichen Fehler:
Durch das Casting wurde der Fehler nicht mehr angezeigt.
quelle
Ich hatte das gleiche Problem, als ich die Count-Eigenschaft wie unten in xUnit verwendet habe.
Nachdem ich die Count () - Funktion für die Sammlung verwendet habe, wurde mein Problem behoben.
quelle