Freigeben über


Struktur von Komponententests

Aktualisiert: November 2007

Ein Komponententest ist eine Methode, die ein Member einer in C#, Visual Basic oder Visual C++ geschriebenen Klasse ist.

Hinweis:

Weitere Informationen zur Verwendung von Komponententests mit C++-Produktionscode und von in C++ geschriebenen Komponententests finden Sie unter Komponententests und C++.

Damit der Komponententest von Testtools in Team System erkannt wird, muss sich die Quellcodedatei in einem Testprojekt befinden, das wiederum Teil einer Visual Studio-Projektmappe ist. Beim Erstellen dieses Projekts oder der gesamten Projektmappe wird das Testprojekt in eine Assembly integriert, die den ausführbaren Komponententest enthält.

Alle Komponententestmethoden werden mit dem [TestMethod()]-Attribut, in Visual Basic mit <TestMethod()> gekennzeichnet und sind Member der [TestClass()]-Klasse. Diese Klasse wird ihrerseits im Namespace Microsoft.VisualStudio.TestTools.UnitTesting definiert. Beim Erstellen eines Komponententests sehen Sie, dass dieser Namespace am Anfang der generierten Datei in einer using-Anweisung oder Imports-Anweisung enthalten ist.

Attribute und Eigenschaften von Komponententests

Neben dem [TestMethod()]-Attribut der Komponententestmethode und dem [TestClass()]-Attribut der enthaltenden Klasse werden weitere Attribute für spezielle Komponententestfunktionen verwendet. Die wichtigsten dieser Attribute sind [TestInitialize()] und [TestCleanup()]. Verwenden Sie eine mit [TestInitialize()] gekennzeichnete Methode zur Vorbereitung von Aspekten der Umgebung, in der der Komponententest ausgeführt wird. Dies dient zum Festlegen eines bekannten Zustands für die Ausführung des Komponententests. Beispielsweise können Sie eine [TestInitialize()]-Methode verwenden, um bestimmte vom Test verwendete Datendateien zu kopieren, zu ändern oder zu erstellen.

Verwenden Sie eine mit [TestCleanup()] gekennzeichnete Methode, um die Umgebung nach der Ausführung eines Tests in einen bekannten Zustand zurückzusetzen. Dazu können das Löschen von Dateien in Ordnern oder das Zurücksetzen einer Datenbank in einen bekannten Zustand gehören. Ein Beispiel hierfür ist das Zurücksetzen einer Bestandsdatenbank in einen Ausgangszustand, nachdem eine in einer Auftragseingabeanwendung verwendete Methode getestet wurde. Desweiteren sollten Sie Bereinigungscode in einer [TestCleanup()]-Methode oder ClassCleanup-Methode verwenden, nicht in einer Finalizer-Methode. Die von einer Finalizer-Methode ausgelösten Ausnahmen werden nicht abgefangen und können unerwartete Ergebnisse verursachen.

Eine wichtige Eigenschaft von Testklassen ist die TestContext-Eigenschaft. Diese Eigenschaft enthält Informationen wie den Namen des gegenwärtig ausgeführten Komponententests, das Bereitstellungsverzeichnis, die Namen der Protokolldateien und bei datengesteuerten Tests die Datenbank, mit der Sie verbunden sind. Die TestContext-Eigenschaft gibt eine TestContext-Instanz zurück. Weitere Informationen finden Sie unter Verwenden der TestContext-Klasse.

Komponententest-Beispiel

Der folgende Codeausschnitt zeigt einen einfachen in C# geschriebenen Komponententest.

[TestMethod()]
public void DebitTest()
{
    string customerName = "Mr. Bryan Walton"; 
    double balance = 11.99; 
    BankAccount target = new BankAccount(customerName, balance);
    double amount = 11.22; 
    target.Debit(amount);
    Assert.AreEqual((System.Convert.ToDouble(0.77)), target.Balance, 0.05); // 0.05 is tolerance for floating-point comparison
    //Assert.Inconclusive("A method that does not return a value cannot be verified.");
}

Ein weiteres Beispiel finden Sie unter Codieren eines datengesteuerten Komponententests.

Komponententest-Ergebnisse

Es gibt drei Möglichkeiten zu überprüfen, ob ein Komponententest erfolgreich war:

  • Verwenden Sie eine oder mehrere Assert-Anweisungen, um bestimmte Ergebnisse zu überprüfen. Weitere Informationen finden Sie unter Verwenden von Assert-Anweisungen.

  • Überprüfen Sie, dass keine Ausnahme ausgelöst wurde. Es ist weiterhin ratsam, eine oder mehrere Assert-Anweisungen zu verwenden.

  • Überprüfen Sie, ob eine spezielle Ausnahme ausgelöst wird. Zu diesem Zweck können Sie das ExpectedExceptionAttribute-Attribut verwenden.

Verwenden von Assert-Anweisungen

Wenn das Ergebnis Erfolgreich oder Fehler eines Tests Ihnen mehr oder wichtigere Informationen bietet als die Aktionen, die beim Test ausgeführt werden, sollten Sie eine oder mehrere Assert-Anweisungen im Testcode verwenden.

Das Testmodul geht davon aus, dass jeder Komponententest in einem erfolgreichen Zustand startet. Der Test verbleibt so lange in diesem Zustand, bis eine Assert-Anweisung ein dem erfolgreichen Zustand widersprechendes Ergebnis generiert und der Zustand von Erfolgreich zu Fehler oder Nicht eindeutig geändert wird, oder bis eine nicht in einem ExpectedExceptionAttribute-Attribut angegebene Ausnahme ausgelöst wird. Anders ausgedrückt, ein Komponententest ohne Assert-Anweisung generiert bei jeder Ausführung das Ergebnis Erfolgreich. Es handelt sich dabei nicht unbedingt um einen sinnlosen Test; möglicherweise möchten Sie lediglich den Code ausführen, um sicherzustellen, dass keine Ausnahme ausgelöst wird. Der bei einem Komponententest ausgeführte Code wird in der Codeabdeckungsstatistik als abgedeckt aufgeführt, unabhängig davon, ob der Test ein entscheidendes Ergebnis hatte oder eine Assert-Anweisung enthielt.

Zum Überprüfen, ob eine bestimmte Aktion ausgeführt oder ein bestimmter Zustand erreicht wird, müssen Sie jedoch Assert-Anweisungen verwenden. Im Microsoft.VisualStudio.TestTools.UnitTesting-Namespace stehen Ihnen zahlreiche Assert-Anweisungen zur Verfügung. Durch die verschiedenen Assert-Anweisungen sind Sie flexibel. So können Sie beispielsweise das Fehlschlagen eines Tests durch Verwenden der Anweisung Assert.Fail() erzwingen. Abgesehen von diesen Assert-Anweisungen können Sie natürlich auch eigene Funktionen erstellen, indem Sie etwa Assert-Anweisungen in if-Blöcken verwenden.

Unabhängig davon, welche Ergebnisse ein Test zurückgibt, hängt die erfolgreiche oder fehlgeschlagene Ausführung von den Assert-Anweisungen des Tests ab. Wenn ein Test mehrere Assert-Anweisungen enthält, bleibt der Zustand des Tests so lange Erfolgreich, bis eine Assert-Anweisung auftritt, die den Zustand zu Fehler oder Nicht eindeutig ändert.

Weitere Informationen finden Sie unter Verwenden der Assert-Klassen.

Siehe auch

Referenz

Microsoft.VisualStudio.TestTools.UnitTesting

Weitere Ressourcen

Erstellen von Komponententests