2009-01-27 5 views
12

Angenommen, Visual Studio.NET 2008 und MsTest werden zum Ausführen von Komponententests verwendet. Wenn ein System auf einem Dienstcontainer basiert und eine Abhängigkeitsinjektionseinheit erfordert, würde das Testen natürlich das Einrichten von Diensten erfordern.Verwenden einer Basisklasse für Komponententest-Setup und Teardown

Sollten diese Dienste eher in einer Basisklasse eingerichtet werden, die alle Komponententests von oder in jeder Einheitstestklasse ableiten. Wenn es in einer Basisklasse sein sollte, gibt es eine Möglichkeit, die Methoden TestInitialize und ClassInitialize auszuführen, ohne dass sie von der abgeleiteten Klasse aufgerufen werden müssen, z. B. base.Initialise?

Antwort

8

Das MSTest-Framework durchsucht das gesamte Objekt (alle Basisklassen) nach den mit Test* markierten Methoden. Wie wenn Sie sie in der Unit-Test-Klasse deklarieren, müssen Sie sie nicht explizit aufrufen.

+2

Klasse * Methoden werden immer als statisch gekennzeichnet und werden daher nicht von abgeleiteten Klassen aufgerufen. Die Test * -Methoden werden aufgerufen, da sie Instanzmethoden sind. – sduplooy

+0

Sie haben Recht, die Antwort repariert. –

0

Ich bevorzuge die Test* und Class* markierten Methoden auf der tatsächlichen Einheit Testklasse zu sein. Wenn Sie sie für eine Basisklasse definieren, können Sie ihnen keine testspezifischen Aktivitäten hinzufügen. Verwenden Sie stattdessen die statischen und Instanzkonstruktoren und den Finalizer für Ihre Basisklasse.

5

Mit 2008 sollten Sie in der Lage sein [TestInitialize] für eine Basisklasse zu haben, und solange Sie kein weiteres [TestInitialize] irgendwo in der Hierarchie hinzufügen, sollte es aufgerufen werden. Sie könnten auch Dinge mit virtuellen Methoden tun.

Verwandte Themen