Ich weiß, die offensichtliche Antwort hier ist, [SetUp] verwenden, aber es gibt eine sehr reale Chance, dass der Code, der das Ergebnis erhält, eine Ausnahme auslösen konnte, und das möchten wir testen.Gibt es in einem anderen Test eine Möglichkeit zur Wiederverwendung durch den N-Unit-Test?
Haftungsausschluss im Voraus, wir machen keine "echten" Komponententests. Was wir machen, könnte am besten als Integrationstest beschrieben werden, das Design ist fertig, wir haben keine Unit Tests gemacht, wir haben nicht die Ressourcen, um sie jetzt zu machen, aber wir versuchen, eine automatische Abdeckung auf einem größeren zu bekommen Brocken von Funktionalität.
Ein solcher Chunk ist eine Funktion, die Daten aus einer externen Datenbank aggregiert und 4 komplexe Objekte mit verschiedenen Referenzen erstellt, die wir dann in mehreren Tabellen in unserer internen Datenbank speichern. Wir haben die Hauptaggregationsfunktion bereits umstrukturiert, um die Objekte in einer Wrapperklasse zurückzugeben (bevor die Aggregationsfunktion ebenfalls das Einfügen vorgenommen hat). Der Aufrufer führt nun das Einfügen durch. Dies ermöglicht es uns, automatisierte Tests zu schreiben, um die Daten automatisch zu validieren, ohne dass es kompliziert ist, sie wieder aus unserer Datenbank zu entfernen.
Das Problem ist, dass wir in NUnit diese Aggregationsfunktion testen möchten. Wir können es nicht detaillierter machen. Aber wir wollen jedes der 4 Objekte einzeln validieren und sicherstellen, dass die Funktion keine Ausnahmen erzeugt.
Die Funktion dauert ziemlich lange, um mit einem kleinen Satz zu laufen, so dass wir es vermeiden möchten, dasselbe Objekt 4 mal wiederholt auszuführen, um jedes Objekt zu testen.
Idealerweise möchten wir einen Test durchführen, um zu verifizieren, dass die Funktion ohne Fehler abgeschlossen ist-> dieses Ergebnis in die Validierung für ein komplexes Objekt einbringen-> komplexes Objekt-> und so weiter. Ist das mit NUnit möglich oder gibt es ein anderes Paradigma, das wir verwenden können?
Ich nehme an, dass wir im schlimmsten Fall die Aggregation viermal auf demselben Datensatz ausführen.
Was ist das Problem bei der Verwendung eines Setup? Wenn im Setup eine Ausnahme vorliegt, wird der Test nicht ausgeführt, und der Fehler weist darauf hin, dass das Setup aufgrund der Ausnahme XYZ fehlgeschlagen ist. Wenn ein Objekt teuer zu erstellen war, würde ich es in einem Feld zwischenspeichern, damit andere Tests verwendet werden können. –
Zugegeben, wir spielen es bereits schnell und locker mit N-Unit, aber mein Verständnis war, dass Sie das [Setup] nicht "testen" sollten. – SmashCode
Erstellen Sie eine Klassenvariable in der Testklasse, um den Wert zu speichern. Als ein Disclaimer macht dies die Tests abhängig von der Reihenfolge, in der sie ausgeführt werden, was unter normalen Testszenarien eine schlechte Idee ist (Komponententests sollten eigenständig sein und nicht von irgendetwas außerhalb des Tests abhängig sein). Wenn ich in Ihrem Fall wäre, würde ich die Variable Nullable machen, so dass ich leicht testen könnte, um zu sehen, ob der vorherige Test tatsächlich ausgeführt worden war, und eine Assert zu werfen. – Kevin