Aufbau eines Komponententests

Wenn Sie einen Komponententest erstellen, werden der Projektmappe mehrere Dateien hinzugefügt. In diesem Thema werden die häufigsten Dateien mit einem Beispielkomponententest untersucht. Das Beispiel stammt aus dem Thema Exemplarische Vorgehensweise: Erstellen und Ausführen von Komponententests.

Teile einer Komponententestdatei

Wenn Sie einen Komponententest erstellen, wird für jede getestete Klasse eine separate Komponententestdatei erstellt. Jede Komponententestdatei enthält eine Testmethode für jede getestete Methode. In diesem Beispiel gehören die beiden getesteten Methoden zur gleichen Klasse. Deshalb ist nur eine Testklassendatei vorhanden, BankAccountTest.cs.

Oberster Abschnitt der Datei

Die folgende Abbildung zeigt die ersten Codezeilen, einschließlich des Verweises auf die Namespaces, das TestClassAttribute und die TestContext-Klasse. In der exemplarischen Vorgehensweise finden Sie Codebeispiele.

Oberer Abschnitt einer Beispieldatei für Komponententests

  1. Microsoft.VisualStudio.TestTools.UnitTesting: Wenn Sie einen Komponententest erstellen, wird dem Testprojekt ein Verweis auf den Microsoft.VisualStudio.TestTools.UnitTesting-Namespace hinzugefügt, und der Namespace wird am Anfang der Komponententestdatei in einer using-Anweisung eingefügt. Der Namespace umfasst zahlreiche Klassen, die Ihnen die Komponententests erleichtern. Zu diesen gehören u. a. folgende:

    • Assertionsklassen, mit denen Sie Bedingungen in Komponententests überprüfen können

    • Initialization- und Cleanup-Attribute, mit denen Sie Code vor oder nach Komponententests ausführen können, um einen bestimmten Anfangs- und Endzustand sicherzustellen

    • Das ExpectedException-Attribut, mit dem Sie überprüfen können, ob während der Ausführung der Komponententests ein bestimmter Ausnahmetyp ausgelöst wird

    • Die TestContext-Klasse, in der Informationen für Komponententests wie z. B. Datenverbindungen für datengesteuerte Tests sowie für Komponententests für ASP.NET-Webdienste gespeichert werden

    Weitere Informationen finden Sie unter Microsoft.VisualStudio.TestTools.UnitTesting.

  2. TestClassAttribute: Wenn Sie einen Komponententest erstellen, wird in der Testdatei das TestClassAttribute eingefügt, um anzugeben, dass die betreffende Klasse mit dem [TestMethod()]-Attribut markierte Methoden enthalten kann. Ohne das TestClassAttribute werden die Testmethoden ignoriert.

    Eine Testklasse kann Methoden von einer anderen Testklasse erben, die sich in derselben Assembly befindet. Daher können Sie Testmethoden in einer Basistestklasse erstellen und dann in abgeleiteten Testklassen verwenden.

    Weitere Informationen finden Sie unter TestClassAttribute.

  3. TestContext: Wenn Sie Komponententests erstellen, wird für jede Testklasse die Variable testContextInstance eingefügt. In den Eigenschaften der TestContext -Klasse sind Informationen zum aktuellen Test gespeichert. Weitere Informationen finden Sie unter TestContext.

Unterster Abschnitt der Datei

Die folgende Abbildung zeigt den letzten in der exemplarischen Vorgehensweise generierten Codeteil, zu dem der Abschnitt "Zusätzliche Testattribute", das TestMethod-Attribut sowie die Logik der Methode mit einer Assert-Anweisung gehören.

Unterer Abschnitt einer Beispieldatei für Komponententests

  1. Zusätzliche Testattribute: Erweitern Sie diesen Abschnitt, um auskommentierte Methoden anzuzeigen, mit denen durch Verwendung der folgenden Attribute Initialisierung und Bereinigung durchgeführt werden können:

    1. [ClassInitialize()]   Verwenden Sie ClassInitialize, um Code noch vor dem ersten Test in der Klasse auszuführen.

    2. [ClassCleanUp()]   Verwenden Sie ClassCleanup, um Code nach dem Ausführen aller Tests in einer Klasse auszuführen.

    3. [TestInitialize()]   Verwenden Sie TestInitialize für Code, der vor jedem Test ausgeführt werden soll.

    4. [TestCleanUp()]   Verwenden Sie TestCleanup für Code, der nach jedem Test ausgeführt werden soll.

      Erstellen Sie Methoden, die entweder mit dem [ClassInitialize()]-Attribut oder mit dem [TestInitialize()]-Attribut markiert sind, um die Aspekte der Umgebung vorzubereiten, in denen der Komponententest ausgeführt wird. Der Zweck hiervon ist es, einen bekannten Zustand für die Ausführung des Komponententests zu definieren. Beispielsweise können Sie die [ClassInitialize()]-Methode oder die [TestInitialize()]-Methode zum Kopieren, Ändern oder Erstellen bestimmter Datendateien verwenden, die für den Test benötigt werden.

      Erstellen Sie Methoden, die entweder mit dem [ClassCleanup()]-Attribut oder mit dem [TestCleanUp{}]-Attribut markiert sind, um die Umgebung nach dem Ausführen eines Tests zurück in einen bekannten Zustand zu versetzen. Dies kann das Löschen von Dateien in Ordnern oder das Zurücksetzen einer Datenbank in einen bekannten Zustand betreffen. Ein Beispiel hierfür ist das Zurücksetzen einer Bestandsdatenbank in einen Ausgangszustand, nachdem eine in einer Auftragseingabeanwendung verwendete Methode getestet wurde.

      Tipp

      Es wird empfohlen, Bereinigungscode in einer [TestCleanup()]-Methode oder in einer [ClassCleanup()]-Methode zu definieren und nicht in einer Finalizermethode. Die von einer Finalizer-Methode ausgelösten Ausnahmen werden nicht abgefangen und können unerwartete Ergebnisse verursachen.

  2. TestMethodAttribute: Wenn Sie einen Komponententest erstellen, wird jede Komponententestmethode mit dem [TestMethod()]-Attribut markiert. Ohne dieses Attribut wird der betreffende Komponententest nicht ausgeführt. Weitere Informationen zum TestMethod-Attribut finden Sie unter TestMethodAttribute.

  3. Logik der Testmethode samt Assert-Anweisung: Jeder generierte Komponententest umfasst leere Variablen und eine Assert-Anweisung für Platzhalter. Standardmäßig wird als Assert-Platzhalteranweisung meist die Assert.Inconclusive-Anweisung verwendet. Um den Test sinnvoll zu gestalten, müssen Sie die Variablen initialisieren und den Platzhalter durch eine geeignete Assert-Anweisung ersetzen.

    In diesem Beispiel wurde die CreditTest-Komponententestmethode einschließlich der TODO-Anweisungen nach dem Generieren nicht geändert. Die Variablen wurden jedoch initialisiert, und die Assert-Anweisung in der DebitTest-Testmethode wurde ersetzt. TODO-Anweisungen werden als Erinnerung verwendet, dass Sie diese Codezeilen initialisieren möglicherweise müssen.

    Tipp

    Der Inhalt der Testmethoden kann davon je nach Typ von Komponententest und Art der zu testenden Methode abweichen.

Ein Hinweis zu Namenskonventionen: Von den Visual Studio-Testtools werden beim Generieren von Komponententests Namenskonventionen verwendet. Beispielweise wird eine Komponententestdatei benannt, indem das Wort "Test" mit dem Namen der Datei verkettet wird, die den zu testenden Code enthält, im Beispiel "BankAccountTest.cs". Namen von Testklassen und Testmethoden werden auch mit Standardwerten generiert. Sie können diese Standardwerte im Dialogfeld Testgenerierungseinstellungen ändern, das Sie öffnen, indem Sie im Dialogfeld Komponententests erstellen auf Einstellungen klicken.

Der Projektmappe hinzugefügte Elemente

In diesem Abschnitt werden andere in Exemplarische Vorgehensweise: Erstellen und Ausführen von Komponententests generierte Dateien als die Komponententestdatei behandelt.

Tipp

Welche Dateien beim Generieren eines Komponententests standardmäßig erstellt werden, hängt von den Testprojekteinstellungen ab. Um diese Einstellungen zu ändern, klicken Sie auf Extras und dann auf Optionen. Erweitern Sie im Dialogfeld Optionen die Option Testtools, und klicken Sie dann auf Testprojekt.

Die folgende Abbildung zeigt Projektmappen-Explorer nach dem Erstellen eines Komponententests für das Beispielprojekt.

Projektmappen-Explorer für ein Beispielprojekt für Komponententests

  1. Projektmappenelemente: Projektmappenelemente enthält zwei Dateien:

    • Local.testsettings: Mit diesen Einstellungen wird gesteuert, wie lokale Tests ohne Sammlung von Diagnosedaten ausgeführt werden.

    • Bank.vsmdi: Diese Datei enthält Informationen zu den Testlisten in der Projektmappe, mit denen das Fenster des Testlisten-Editors aufgefüllt wird.

    • TraceAndTestImpact.testsettings: Mit diesen Einstellungen wird gesteuert, wie lokale Tests unter Sammlung bestimmter Diagnosedaten ausgeführt werden.

  2. Testprojekt: Enthält die weiteren erforderlichen Dateien für die Komponententests.

  3. Eigenschaften von Testprojekt: Enthält die Datei AssemblyInfo.cs, die Buildoptionen für das Projekt bereitstellt.

  4. Testprojektverweise: Enthält Verweise, die zum Ausführen der Komponententests erforderlich sind. Wenn Sie einen Komponententest aus vorhandenem Code generieren, sind die erforderlichen Verweise darin eingeschlossen. Sie können jedoch Verweise hinzufügen, um die Tests anzupassen.

  5. Komponententestdatei: Dies ist die im ersten Abschnitt dieses Themas beschriebene Komponententestdatei. Für jede getestete Klasse wird eine separate Komponententestdatei im Testprojekt erstellt. In diesem Beispiel gehören die zwei getesteten Methoden zur gleichen Klasse. Deshalb ist nur eine Testklassendatei vorhanden, BankAccountTest.cs.

Siehe auch

Referenz

Microsoft.VisualStudio.TestTools.UnitTesting

Konzepte

Erstellen und Ausführen von Komponententests für vorhandenen Code

Komponententests und C++

Komponententests für generische Methoden

Komponententests für ASP.NET-Webdienste

Komponententests für Private-, Internal- und Friend-Methoden