TestInitialize vs ClassInitialize

71

Was ist der Unterschied zwischen TestInitializevs ClassInitializein MSTest? Was sind die Vor- und Nachteile von jedem?

Ich habe den Eindruck, dass TestInitialzejedes Mal mit JEDEM Test ausgeführt werden sollte? Ist das korrekt? Und das ClassInitializewird jedes Mal ausgeführt, wenn eine neue Instanz einer Klasse erstellt wird?

snowmom475
quelle

Antworten:

106

Beide Attribute sind nur für die Klassen (und damit Tests) verfügbar, zu denen sie gehören.

TestInitializewird vor jedem Test ausgeführt , der in derselben Klasse deklariert ist, in der das Attribut deklariert ist.

ClassInitializewird nur bei der Initialisierung der Klasse ausgeführt, in der das Attribut deklariert ist. Mit anderen Worten, es wird nicht für jede Klasse ausgeführt. Nur für die Klasse, die die ClassInitializeMethode enthält .

Wenn Sie eine Methode wünschen, die vor der Initialisierung aller Tests oder Klassen einmal ausgeführt wird, verwenden Sie die AssemblyInitialize.

Chaliasos
quelle
3
Was wäre ein Anwendungsfall für ClassInitialize und AssemblyInitialize? Es fällt mir schwer, einen tatsächlichen Anwendungsfall für ClassInitialize zu bekommen ...
Ini
2
Ein Anwendungsfall ist das Ausführen von Integrationstests für eine DLL mit einer Initialisierungsmethode, deren Ausführung lange dauert. ClassInitialize kann verwendet werden, um die Initialisierung zu Beginn des Teststapels durchzuführen, und ClassCleanup würde die terminate-Methode der DLL aufrufen.
user8550137
Ein anderer Fall könnte das Einrichten von Objekten mit Tonnen von injizierten Abhängigkeiten und Schein-Setups sein. Ich habe einige Testklassen mit mehr als 100 Zeilen, die sonst in jedem Test enthalten sein müssten.
DPH
2
@DPH TestInitialize ist gut für wiederholten Code, nur wenn das Ausführen des Codes lange dauert, werden Sie ClassInitialize
Michael Freidgeim