2012-08-26 17 views
29

Ich bin neugierig, warum das Fixture Setup statisch sein muss? Es scheint mir intuitiver zu sein, Instanzvariablen pro Fixture zu haben, die die Lebensdauer des Fixtures teilen.Warum muss eine ClassInitialize-Methode statisch sein?

Ja, diese können im Konstruktor initialisiert werden, aber dann nehme ich an, dass sie außerhalb der Kontrolle des Testlaufers liegen.

Welche Designanforderungen oder Philosophien bestimmten, dass die Setup-Methode statisch sein sollte?

Antwort

38

Die Methode mit dem ClassInitialize-Attribut wird einmal für alle Tests in der Klasse ausgeführt. Eine Instanz der Klasse wird jedes Mal erstellt, wenn ein Test ausgeführt wird, daher muss sie statisch sein, um nur einmal ausgeführt zu werden.

Wenn Sie für jeden Test initialisieren möchten, können Sie das Attribut TestInitialize verwenden, das immer dann ausgeführt wird, wenn eine neue Instanz der Klasse erstellt wird (vor dem Ausführen eines Tests).

Wenn Sie weitere Informationen benötigen, können Sie Check-out:

That Pesky MSTest Execution Ordering

+11

Danke, ich wusste nicht, eine Instanz für jeden Test erstellt wurde. – ProfK

+5

Ich glaube nicht, dass die Methode statisch sein muss, um nur einmal ausgeführt zu werden. Das Test-Framework initialisiert und führt die Testklassen aus, die wir für richtig halten. Es könnte leicht eine nicht-statische Methode vor und nach dem Ausführen aller Testmethoden aufrufen. – d512

+0

Wenn es nicht statisch wäre, könnte die Initialisierung nicht für alle Testinstanzen freigegeben werden. I.e. wenn Sie einen von allen Tests verwendeten Testdienst initialisieren müssen. – user3285954

Verwandte Themen