2016-08-02 27 views
0

Ich habe drei Tests, FunnyCarSteps.cs, CarLotMaxSteps.cs und CarTypeSteps.cs. Wenn sie getrennt gefahren werden, vergehen sie alle, aber wenn sie zusammen laufen, passiert nur CarLotMaxSteps.Drei Unit-Tests bestehen, wenn sie separat ausgeführt werden, nur einer passiert zusammen

CarTypeSteps.cs schlägt in Zeile 49 mit einer Lambda-Methode fehl, keine Quelle verfügbar Fehler. FunnyCarSteps.cs schlägt in Zeile 19 mit einem Fehler außerhalb des Bereichs fehl.

Ich bin neu in der Unit-Tests und verstehe nicht, was vor sich geht.

Jede Hilfe wird sehr geschätzt.

+1

Nicht möglich ohne einen Blick auf Ihre Implementierung der Program() -Klasse. Es scheint, dass Sie statische geteilte Daten zwischen Ihren Instanzen haben – mrAtari

+0

In der ** Gegebene ** IHaveAFullCarlot Methode der 'CarLotMaxSteps' Klasse nennen Sie' carLotMaxProgram.CarList.Clear(); '. Gibt es einen Grund dafür? Die Notwendigkeit, zu Beginn eines Tests etwas aufzuräumen, ist die Angabe der Abhängigkeiten zwischen den Tests. –

+0

Das war das Problem HerrAtari! Danke. – CryptoJones

Antwort

3

Da die Program.Mainstatic ist, ist Ihre CarList wahrscheinlich auch statisch. NUnit führt Tests parallel aus, so dass jeder der Tests fast zur gleichen Zeit ausgeführt wird und jeder die Liste löscht und gleichzeitig hinzufügt.

Das ist der Grund, warum Ihre Tests gut laufen, aber wenn sie zusammen laufen. Man startet und beginnt mit dem Testen, dann kommt der zweite und ändert die Daten, mit denen der erste Test arbeitet.

Sie müssen die statische von allem in Program mit Ausnahme der Haupt entfernen. Im Idealfall sollten Sie den gesamten Code Ihrer Fahrzeugliste in eine neue nicht statische Klasse umgestalten. Das Programm dient zum Ausführen Ihres Programms, es sollte nichts mit Autos zu tun haben. Sie sollten Ihre CarLot-Klasse (oder was auch immer) in Main erstellen und ausführen und keine Eigenschaften zu Program hinzufügen.

Eine weitere Option ist das Hinzufügen des Attributs [Parallelizable(ParallelScope.None)] zu jeder Ihrer Testklassen. Dadurch werden sie einzeln ausgeführt. Dies wird das Problem mit Ihren Tests beheben, aber es repariert nicht die Tatsache, dass Ihr Code für mehr als eine einfache Übung falsch ist.

+0

Wow! Du warst absolut richtig. Ich hatte die folgende statische Klasse in meinem Programm. http://pastebin.com/pquTVmu4 Ich habe sie von statischen Variablen in Instanz geändert und sie alle erfolgreich gestartet. Vielen Dank Herr Prouse !! – CryptoJones

+1

Anthing namens GlobalVariables sollte sofort verdächtig sein;) –

+1

Natürlich führt NUnit keine Tests parallel parallel aus - Sie müssen es dazu sagen. Aber eine gemeinsame statische kann in jedem Fall ein Problem verursachen. – Charlie