Schleife innerhalb einer unit-test
Können, haben wir eine Schleife in einem unit test?
Meine Methode gibt ein IEnumerable<IEnumerable>
ich würde gern unit-Tests dieser Logik, wo die IEnumerable<IEnumerable>
erstellt. Im Grunde möchte ich testen, ob die Anzahl der Elemente in der IEnumerable
sind wie erwartet.
Kann ich nicht herausfinden, eine Alternative Methode zur Untersuchung der inneren IEnumerable
ohne eine Schleifenanweisung. Bitte lassen Sie mich wissen, wenn dies ist eine gute Praxis.
InformationsquelleAutor der Frage Shankar Raju | 2011-05-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keinen technischen Grund, warum Sie es nicht tun. Sie können mehrere Assert-Anweisungen in einem unit-test. Mit einer Assert-Anweisung in einer Loop-Schleife ist einfach eine Kurzform Möglichkeit, mehrere Assert-Anweisungen in einem test.
Jedoch, einige Leute denken, es sollte auch nur ein einziges Assert-Anweisung in einem unit-test.
Ich persönlich nicht Zustimmen - ich denke ein test sollte test eine einzige Sache - und um das zu tun, dass manchmal müssen Sie möglicherweise mehr als eine Assert-Anweisung.
Wenn Ihr Methode liefert eine IEnumerable-Produkt ist, und jedes Produkt enthält eine IEnumerable der Farbe ist, dann denke ich, dass der folgende test ist in Ordnung:
Allerdings müssen Sie sich bewusst sein, dass, wenn die IEnumerable-0 enthält Elemente, die Schleife wird nie führen Sie die Assert-Anweisungen und Ihre unit-test wird "pass" - in der Erwägung, dass Sie wohl gedacht haben, zu Versagen.
Zur Behebung dieser situation haben, könnten Sie einen separaten test machen sicher, dass es mehr als 0 Elemente im IEnumerable (d.h., dass GetProducts tatsächlich wieder einige Produkt):
InformationsquelleAutor der Antwort Alex York
Einen Grund, um zu vermeiden schreiben Sie eine Schleife in einem test würde es sein, dass der test präzise und gut lesbar auf einen Blick. Da haben Sie tagged die Frage mit NUnit und Sie sagen, Sie wollen einfach nur, um zu testen, ob das element zu zählen ist, wie erwartet, sollten Sie Ihre Behauptet mit dem NUnit Einschränkungen.
Beispielsweise
schlägt fehl mit der Meldung:
Erwartet: alle items-Eigenschaft Länge gleich 3, und alle Elemente, die Zeichenfolge mit "a"
Aber war: < "abc", "Katze", "bit", "hat" >
aber vergeht, wenn Sie "bit" auf "bat".
Buch xUnit Test Patterns: Refactoring Test Code
Von Gerard Meszaros
hat viele gute Antworten auf solche Fragen wie deine.
InformationsquelleAutor der Antwort Grokodile
Ja, Sie haben Schleifen im unit-test, aber mit Vorsicht. Wie erwähnt von Alex York, loops sind akzeptabel, wenn Sie testen eine Sache; D. H. eine Erwartung.
Wenn Sie Schleifen, dann empfehle ich, dass Sie muss zwei Dinge tun:
Hier ist ein Beispiel aus meinem Test der Größer Als Eigenschaft eines Objekts.
Ich testen, ob meine sortierte Liste ist nicht leer in das test-setup mit:
Habe ich mehrere Behauptet sogar innerhalb meiner Schleife, aber alle versichert sind Tests die einzige Erwartung:
Den test Beschreibung bei der iteration Ebene ist, so dass Sie erhalten Fehler wie:
statt nur:
Die Frage/Debatte über meinem obigen code:
Ist, bin ich den Test von einem Ding?
Ich bin der Geltendmachung auf 4 verschiedene Vergleichs-Methoden in das Objekt, die argumentiert werden könnte, wie Prüfung 4 Dinge nicht. Der Zähler ist größer als ist größer als ist größer als ist, und dass alle Methoden, die machen, dass die Bewertung sollte einheitlich sein.
InformationsquelleAutor der Antwort John Washburn