| 

.NET C# Java Javascript Exception

2
Ich bin in der misslichen Lage MS Test als Unit Test Framework einsetzen zu müssen. Meine Aufgabe ist es Daten in eine XML Datei zu schreiben und aus ihr zu löschen. Da ich bereits in der untersten Abstraktionsebene angekommen bin muss ich nun auch wirklich auf der Datei arbeiten. Diese lasse ich mir mit dem DeploymentItem Attribut anlegen, was super funktioniert. Wenn ich jetzt jedoch in einem Test Daten lösche, die ich in einem anderen benötige, schlagen die Tests fehl weil die Reihenfolge nicht eingehalten wurde.

Das einfachste wäre meiner Meinung nach, dass MS Test die Datei nicht einmal pro Testklasse anlegt, sondern für jeden Testfall wo das entsprechende Attribut darüber steht. Dies tut er aber offensichtlich nicht. Liegt der Fehler bei mir oder ist das ein "Feature"?

Wie kann ich das umgehen ohne die Reihenfolge der Tests festzulegen, mehr Daten in der Datei zu hinterlegen oder mehrere Dateien mit unterschiedlichen Namen zu deployen?
News:
24.08.2011
Hendrik Lösch 1,5k 1 9
2 Antworten
4
Ergänzung / Variante zu Nicolais Vorschlag:

Verwende DeploymentItem wie bisher, aber lege in der Setup-Methode eine Kopie davon an und vermerke den Namen oder das Handle der Kopie in einem Feld Deiner Testklasse. In der TearDown-Methode räumst Du die Datei dann wieder auf.
24.08.2011
Matthias Hlawatsch 13,2k 4 9
Wenn ich das mache bekomme ich eine Exception, weil wohl zeitgleich von zwei verschiedenen Threads aus auf die Datei zugegriffen wird. Ich schließe die Datei in meinem Code aber automatisch und kopiere sie mit File.Copy welches keine Referenz zurück liefert :(
Hendrik Lösch 24.08.2011
Ich hatte ein Close vergessen... Jetzt funktioniert es. Danke :)
Hendrik Lösch 24.08.2011
8
Hallo,

dafür gibt es extra SetUp und Teardown Attribute. Wenn du eine Methode mit dem Attribut [TestInitialize] hast, wird diese vor jeder anderen [TestMethod] in der Klasse aufgerufen.

Du könntest also in deiner [TestInitialize] Methode die XML Datei erstellen und schließlich in deinen [TestMethod] Methoden deine Tests durchführen. Das Gegenstück zu [TestInitialize] ist [TestCleanUp]. Eine Methode mit dem Attribut [TestCleanUp] wird nach jedem Test ausgeführt.

An deiner stelle würde ich in der init methode die xml schreiben und beim clean up die Datei löschen. So kannst du sicherstellen das in jeder Test-Methode die gleiche XML Datei verwendet wird.

Eine gute Übersicht Aller MSTest Attribute findest du hier:
http://blogs.msdn.com/b/nnaderi/archive/2007/02/01/mstest-vs-nunit-frameworks.aspx

Grüße
24.08.2011
Nicolai Schönberg 2,4k 2 9

Stelle deine Unit-testing-Frage jetzt!