Teilen über


MSTest-Lebenszyklus

MSTest bietet einen gut definierten Lebenszyklus für Testklassen und Testmethoden, sodass Setup- und Teardownvorgänge in verschiedenen Phasen des Testausführungsprozesses ausgeführt werden können. Der Lebenszyklus kann in die folgenden drei Phasen gruppiert werden:

  • Lebenszyklus auf Assemblyebene
  • Lebenszyklus auf Klassenebene
  • Lebenszyklus der Teststufe

Die Ausführung der Lebenszyklusereignisse erfolgt von der höchsten Ebene (Assembly) bis zur niedrigsten Ebene (Testmethode). Die Reihenfolge der Ausführung lautet wie folgt:

  1. Initialisierung der Assembly
  2. Klasseninitialisierung (für jede Testklasse)
  3. Testinitialisierung (für jede Testmethode)
  4. Testausführung
  5. Testbereinigung (für jede Testmethode)
  6. Klassenbereinigung (für jede Testklasse)
  7. Montagebereinigung

Lebenszyklus auf Assemblyebene

Der Assemblylebenszyklus beschreibt den Lebenszyklus der gesamten Assembly, die alle Testklassen und Methoden enthält. Zum Verwalten des Assemblylebenszyklus stellt MSTest die Attribute "AssemblyInitialize " und "AssemblyCleanup " bereit. Weitere Informationen zu diesen Attributen finden Sie in der AssemblyInitialize- und AssemblyCleanup-Dokumentation .

Lebenszyklus auf Klassenebene

Der Testklassenlebenszyklus bezieht sich auf den Lebenszyklus einzelner Testklassen innerhalb der Assembly und kann mithilfe der Attribute "ClassInitialize " und "ClassCleanup " implementiert werden. Mit diesen Attributen können Sie Setup- und Teardownmethoden definieren, die vor bzw. nach allen Tests in einer Klasse ausgeführt werden. Weitere Informationen zu diesen Attributen finden Sie in der Dokumentation " ClassInitialize" und "ClassCleanup ". Der Lebenszyklus auf Klassenebene wird nur einmal pro Klasse ausgeführt, unabhängig von der Anzahl der Tests in einer Klasse.

Lebenszyklus auf Testebene

Der Lebenszyklus der Testebene wird für jede Testmethode ausgeführt. Bei parametrisierten Tests wird jeder Parametersatz als separate Testmethode behandelt, und der Lebenszyklus wird für jeden Parametersatz ausgeführt. Der Lebenszyklus der Testebene kann in Setup, Ausführung und Bereinigung unterteilt werden, wobei Setup und Bereinigung mehrere Implementierungsmöglichkeiten unterstützen.

Konfiguration

Die Einrichtungsphase des Lebenszyklus der Testebene ist für die Vorbereitung der Testumgebung vor der Ausführung jeder Testmethode verantwortlich. Dies kann mithilfe des TestInitialize Attributs oder durch Implementieren eines Konstruktors in der Testklasse erreicht werden. Im Falle der Vererbung folgt die Ausführung von TestInitialize Methoden der Reihenfolge von der Basisklasse bis zur abgeleiteten Klasse. Wenn eine Testklasse einen Konstruktor implementiert, wird sie vor der TestInitialize Methode ausgeführt. Weitere Informationen zum Attribut finden Sie in der Dokumentation zum TestInitializeAttribut auf Testebene .

Hinweis

Im Gegensatz zum Klassenkonstruktor TestInitialize können Methoden asynchron sein und unterstützen auch die Verwendung von Attributen wie TimeoutAttribute.

Ausführung

Die Ausführungsphase ist die Phase, in der die eigentliche Testmethode ausgeführt wird. Wenn eine Testmethode einen Task oder ValueTask zurückgibt, wird auf die Testmethode gewartet.

Warnung

Bei asynchronen Testmethoden wird kein SynchronizationContext bereitgestellt. Dies gilt nicht für UITestMethod Tests für UWP und WinUI, da sie im UI-Thread ausgeführt werden, der über einen SynchronizationContext verfügt.

Säuberungsaktion

Die Bereinigungsphase des Lebenszyklus der Testebene ist für das Bereinigen der Testumgebung nach der Ausführung jeder Testmethode verantwortlich. Dies kann mithilfe des TestCleanup Attributs oder durch Implementieren der IDisposable/IAsyncDisposable Schnittstelle in der Testklasse erreicht werden. Wenn eine Testklasse IDisposable oder IAsyncDisposable implementiert, wird ihre Dispose/DisposeAsync Methode nach der TestCleanup Methode ausgeführt. Bei Vererbung folgt die Ausführung von TestCleanup-Methoden der Reihenfolge von der abgeleiteten Klasse zur Basisklasse. Weitere Informationen zum Attribut finden Sie in der Dokumentation zum TestInitializeAttribut auf Testebene .

Bestellung

Die vollständige Reihenfolge des Lebenszyklus auf Testebene lautet wie folgt:

  1. Erstellen einer Instanz der Testklasse
  2. Eigenschaft TestContext festlegen, wenn vorhanden
  3. TestInitialize ausführen (sofern implementiert)
  4. Testmethodenausführung
  5. Aktualisieren Sie TestContext mit Testergebnissen (wie der Outcome-Eigenschaft)
  6. Ausführen von TestCleanup bei Implementierung
  7. Ausführen von DisposeAsync, wenn implementiert
  8. Dispose ausführen, wenn implementiert