, , , ,

ClassCleanup() Verhalten

Um aus Microsoft Test Manager automatisierte Testfälle (Unit Tests, Coded UI Tests, Ranorex, Selenium usw.) ansprechen zu können, müssen diese in Testmethoden „verpackt“ werden.
Wie bekannt sind diese Methoden in eine Struktur des UnitTest Frameworks von Microsoft Visual Studio eingepflegt, die auch Initialisierungs- und Abschluss-Methoden bietet:

  • Initialisierung: ClassInitialize(), TestInitialize()
  • Abschluss: TestCleanup(), ClassCleanup()

nehmen wir mal an, wir haben 2 Testklassen mit je 2 Testfällen:

Klasse1: TC1, TC2
Klasse2: TC3, TC4

Wenn wir alle Testfälle markieren und per „Run“ ausführen, werden natürlich auch die einzelnen Initialize / Cleanup Methoden ausgeführt.

Wie ist die Aufrufreihenfolge der einzelnen Initialisierungs / Abschlussmethoden?

Eigentlich würde folgende Reihenfolge der Initialisierung / Abschlussmethoden „logisch“ erscheinen:

  • ClassInitialize Klasse1
  • TestInitialize TC1 / TestCleanup TC1
  • TestInitialize TC2 / TestCleanup TC2
  • ClassCleanup Klasse1
  • ClassInitialize Klasse2
  • TestInitialize TC3 / TestCleanup TC3
  • TestInitialize TC4 / Testcleanup TC4
  • ClassCleanup Klasse2

Wenn die Testfälle gestartet werden, kommt aber folgende Ausgabe:

  • ClassInitialize Klasse 1
  • TestInitialize TC1 / TestCleanup TC1
  • TestInitialize TC2 / TestCleanup TC2
  • ClassInitialize Klasse 2
  • TestInitialize TC3 / TestCleanup TC3
  • TestInitialize TC4 / Testcleanup TC4
  • ClassCleanup Klasse 1
  • ClassCleanup Klasse 2

Die Klasse wird wie vermutet mit dem ersten Testfall einer Klasse initialisiert, aber erst aufgeräumt, nachdem alle Testfälle, aller Klassen, abgeschlossen sind.
Das liegt daran, dass bei der normalen Durchführung, eine Aufruf-Reihenfolge der einzelnen Testfälle nicht sichergestellt werden kann.

Muss vor dem Aufruf der zweiten Klasse sichergestellt sein, dass die erste Klasse abgeschlossen ist (z.B. Filezugriff), kann es entweder durch Ordered Tests oder durch Auslagerung der Initialisierung / Abschlusslogik  in die TestInitialize / Cleanup Methoden realisiert werden.

0 Antworten

Hinterlassen Sie einen Kommentar

Wollen Sie an der Diskussion teilnehmen?
Feel free to contribute!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.