2012-09-20 4 views
35

Ich habe mit diesem Problem gekämpft, hoffentlich wird es jemand anderem helfen.Klassen, die mit TestInitialize und TestCleanup nicht ausgeführt wurden

Während Tests Erzeugungseinheit unter Verwendung MSTest ich entdeckte ich wurde in jedem Test den gleichen Code wiederholt wird, und ein paar Attribute praktisch gefunden (TestInitialize, TestCleanup, ClassInitialize und ClassCleanup).

Wenn Sie eine Methode mit einem dieser Attribute markieren, sollte es angeblich automatisch ausgeführt werden (vor jedem Test, nach jedem Test, vor allen Tests und nach allen Tests). Frustrierend ist das nicht passiert, und meine Tests sind fehlgeschlagen. Wenn diese Methoden direkt von den mit dem Attribut TestMethod gekennzeichneten Klassen aufgerufen werden, sind die Tests erfolgreich. Es war offensichtlich, dass sie nicht selbstständig waren.

Hier einige Beispiel-Code, den ich verwendet wurde:

[TestInitialize()] 
private void Setup() 
{ 
    _factory = new Factory(); 
    _factory.Start(); 
} 

Warum ist diese Ausführung nicht?

Antwort

84

Der Trick ist, diese Methoden public zu machen:

[TestInitialize()] 
public void Setup() 
{ 
    _factory = new Factory(); 
    _factory.Start(); 
} 

Wenn sie private sind sie nicht ausführen.

+3

Auch sie werden nicht funktionieren, wenn sie statisch sind. – stuartdotnet

+0

@Stefan de Kok: Unglaublich, dass ich es übersehen habe. Danke für den Tipp! – christoph

+1

Auch sie funktionieren nicht, wenn async. – andrew

9

TestInitialize und TestCleanup werden vor und nach allen Tests ausgeführt, nicht vor und nach jedem Test.

das falsch ist, siehe zum Beispiel den folgenden Link: http://social.msdn.microsoft.com/Forums/en-US/vststest/thread/85fb6549-cbaa-4dbf-bc3c-ddf1e4651bcf

Siehe auch MSDN

http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.classinitializeattribute.aspx

Der Beispielcode zeigt, wie TestInitialize, ClassInitialize und AssemblyInitialize verwenden.

1

Ich hatte auch das Problem und - aufgrund meines Missverständnisses, wie die Methoden aufgerufen werden - löste es damit: Lassen Sie Ihre Tests von der Klasse erben, die die Methoden TestInitialize und TestCleanup enthält.

Verwandte Themen