Exemplarische Vorgehensweise: Erstellen und Ausführen von Komponententests
Aktualisiert: November 2007
Diese exemplarische Vorgehensweise führt Sie durch das Erstellen, Ausführen und Anpassen verschiedener Tests mit Testtools in Team System. Sie beginnen mit einem C#-Projekt in der Entwicklungsphase und erstellen Tests zur Codeüberprüfung. Anschließend führen Sie die Tests aus und überprüfen die Ergebnisse. Basierend auf den Ergebnissen können Sie daraufhin Änderungen am Projektcode vornehmen und die Tests erneut ausführen.
Hinweis: |
---|
Informationen zum Ausführen von Tests in einer Befehlszeile finden Sie unter Exemplarische Vorgehensweise: Verwenden des Befehlszeilen-Testprogramms. |
Im Verlauf dieser exemplarischen Vorgehensweise führen Sie folgende Aufgaben aus:
Vorbereiten eines Projekts "Bank Account", das in der exemplarischen Vorgehensweise verwendet werden soll.
Öffnen eines vorhandenes Projekts.
Erstellen von Komponententests für öffentliche und private Methoden.
Ausführen dieser Tests zum Überprüfen des Codes.
Suchen und Beheben von Fehlern in den Tests.
Suchen und Beheben von Fehlern im Code.
Vorbereitungsmaßnahmen
- Das Projekt Woodgrove Bank. Siehe Beispiel für einen Komponententest.
Vorbereiten der exemplarischen Vorgehensweise
So bereiten Sie die exemplarische Vorgehensweise vor
Öffnen Sie Visual Studio Team System Test Edition.
Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.
Das Dialogfeld Neues Projekt wird angezeigt.
Klicken Sie unter Projekttypen auf Visual C#.
Klicken Sie unter Vorlagen auf Klassenbibliothek.
Geben Sie in der Zeile Name den Wert Bank ein, und klicken Sie auf OK.
Hinweis: Wenn der Name "Bank" bereits verwendet wird, wählen Sie einen anderen Namen für das Projekt aus.
Das neue Projekt Bank wird erstellt und im Projektmappen-Explorer angezeigt.
Doppelklicken Sie im Projektmappen-Explorer auf die Datei Class1.cs, um die Datei im Code-Editor Visual Studio zu öffnen.
Kopieren Sie den Quellcode aus Beispiel für einen Komponententest.
Ersetzen Sie den ursprünglichen Inhalt von Class1.cs mit dem Code aus Beispiel für einen Komponententest.
Klicken Sie im Menü Erstellen auf Projektmappe erstellen.
Sie haben nun ein Projekt mit dem Namen Bank erstellt. Dieses Projekt enthält zu testenden Quellcode und Tools, mit denen der Quellcode getestet werden kann. Der Namespace für Bank (BankAccountNS) enthält die öffentliche BankAccount-Klasse, deren Methoden Sie im Folgenden testen werden.
Erstellen eines Komponententests
Voraussetzung: Führen Sie die im Vorbereiten der exemplarischen Vorgehensweise-Verfahren angegebenen Schritte aus.
So erstellen Sie einen Komponententest
Doppelklicken Sie im Projektmappen-Explorer im Projekt Bank auf die Datei Class1.cs.
Die Quelldatei wird zum Anzeigen und Bearbeiten geöffnet.
Führen Sie in der Datei Class1.cs in der BankAccount-Klasse einen Bildlauf zur Debit()-Methode durch.
Klicken Sie mit der rechten Maustaste auf die Debit()-Methode, und wählen Sie Komponententests erstellen aus.
Das Dialogfeld Komponententests erstellen wird angezeigt.
Unter Aktuelle Auswahl werden in einer Struktur die Klassen- und Memberhierarchie der Assembly angezeigt, die die BankAccount-Klasse enthält. Sie können auf dieser Seite Komponententests für eine beliebige Auswahl der angezeigten Members generieren und ein Testprojekt auswählen, in dem die generierten Komponententests platziert werden sollen.
In der Struktur ist nur die Debit()-Methode ausgewählt. Behalten Sie die Auswahl bei, und wählen Sie zusätzlich die Credit()-Methode aus.
Wählen Sie unter Ausgabeprojekt die Option Neues Visual C#-Testprojekt erstellen aus.
Klicken Sie auf Einstellungen.
Das Dialogfeld Testgenerierungseinstellungen wird angezeigt. Unter Namenseinstellungen können Sie die Benennungsoptionen für das Generieren der Testdateien, Testklassen und Testmethoden anpassen. Unter Allgemein können Sie verschiedene weitere Aspekte der Testgenerierung ändern. Behalten Sie die Standardwerte für diese Einstellungen bei, und klicken Sie auf OK.
Klicken Sie im Dialogfeld Komponententests erstellen auf OK.
Das Dialogfeld Neues Testprojekt wird angezeigt.
Übernehmen Sie den Standardnamen, und klicken Sie auf Erstellen.
Ein Testprojekt mit dem Namen TestProject1 wird erstellt und im Projektmappen-Explorer angezeigt.
Dem Projekt TestProject1 wird eine Datei mit dem Namen BankAccountTest.cs hinzugefügt, die eine Testklasse enthält. Diese Klasse wiederum beinhaltet eine TestContext-Eigenschaft sowie Methoden zum Testen der Debit()-Methode und der Credit()-Methode.
Hinweis: Jeder Testmethode wird automatisch das TestMethod()-Attribut zugewiesen. Jeder Test entspricht einer einzelnen zu testenden Methode im Code-unter-Test (CUT). Testmethoden werden in einer Testklasse zusammengefasst, der das TestClass()-Attribut zugewiesen wird.
Geben Sie in BankAccountTest.cs Werte für die zu testenden Variablen an. Führen Sie einen Bildlauf zur DebitTest-Methode durch, in die // TODO-Zeilen eingefügt wurden. Diese Zeilen geben die festzulegenden Variablen an. Welche Werte sollten Sie verwenden? Um dies zu beantworten, benötigen Sie die Werte, die beim Ausführen der Anwendung in den Variablen gespeichert werden. Wir bestimmen diese Werte im folgenden Schritt.
Öffnen Sie die Datei Class1.cs, und führen Sie einen Bildlauf zur Main-Methode durch. Hier sind verschiedene Initialisierungswerte angegeben: Der Kundenname wird mit Mr. Bryan Walton und der Saldo mit 11.99 initialisiert. Die Credit-Methode wird mit dem Parameterwert 5.77 und die Debit-Methode mit dem Parameterwert 11.22 aufgerufen. Wenn die Debit-Methode mit 11.22 aufgerufen wird, sollte Balance nach dem Aufruf den Wert 0.77 haben (beim angegeben Anfangssaldo von 11.99 in Balance).
Hinweis: Verwenden Sie den erwarteten Balance-Wert (0.77) in der Vorgehensweise Ausführen und Anpassen einen Komponententests.
Führen Sie in der Datei BankAccountTest.cs einen Bildlauf zur DebitTest-Methode durch.
Geben Sie die folgenden Werte an:
BankAccount target = new BankAccount("Mr. Bryan Walton", 11.99); double amount = 11.22;
Nehmen Sie in der Datei BankAccountTest.cs die gleichen Änderungen in der CreditTest-Methode vor.
Speichern Sie die Datei BankAccountTest.cs.
Sie haben eine Quellcodedatei erstellt, die Tests für das Projekt Bank enthält. Sie können nun damit beginnen, die Tests in der BankAccountTest-Klasse für den Code im Projekt Bank auszuführen.
Ausführen und Anpassen einen Komponententests
Voraussetzung: Führen Sie die in der Vorgehensweise Erstellen eines Komponententests angegebenen Schritte aus.
So führen Sie einen Komponententest aus und nehmen Anpassungen vor
Öffnen Sie das Fenster Testansicht.
Klicken Sie mit der rechten Maustaste auf DebitTest, und klicken Sie auf Auswahl ausführen.
Das Fenster Testergebnisse wird angezeigt. Der DebitTest-Test wird ausgeführt.
Während der Ausführung wird im Fenster Testergebnisse in der Spalte Ergebnis der Teststatus Wird ausgeführt angezeigt. Nachdem der Testlauf beendet wurde, wird als Ergebnis für den Test Nicht eindeutig angezeigt.
Doppelklicken Sie im Fenster Testergebnisse auf die Zeile für den betreffenden Test.
Dadurch wird die Seite Testergebnisdetails geöffnet, auf der Informationen über die Testergebnisse angezeigt werden.
Beachten Sie, dass auf der Seite Testergebnisdetails die Fehlermeldung "Assert.Inconclusive fehlgeschlagen. Eine Methode, die keinen Wert zurückgibt, kann nicht überprüft werden." angezeigt wird. Um den Test erfolgreich ausführen zu können, beginnen Sie im ersten Schritt damit, die genannte Assert-Anweisung zu suchen und zu überprüfen.
Zum Ermitteln der Testmethode mit der Assert-Anweisung öffnen Sie die Datei BankAccountTest.cs und führen einen Bildlauf zur DebitTest()-Methode durch.
Die Assert-Anweisung befindet sich in der letzten Zeile der DebitTest-Methode. Die Anweisung lautet wie folgt:
Assert.Inconclusive("A method that does not return a value cannot be verified.");
Kommentieren Sie die Assert-Anweisung aus.
Beim erneuten Ausführen des Tests würden Sie als Ergebnis Erfolgreich erhalten, dies allerdings nur, weil jetzt keine Ergebniswerte mehr geprüft werden. Sie müssen Code hinzufügen, der einen Test auf die erwarteten Ergebnisse durchführt. Fügen Sie am Ende der DebitTest-Methode folgende Anweisung hinzu:
Assert.AreEqual((System.Convert.ToDouble(0.77)), target.Balance, 0.05);
Diese Anweisung vergleicht das erwartete Ergebnis (0.77) mit dem tatsächlichen Ergebnis des Aufrufs der Balance-Methode in der Klasse BankAccount. Wenn die Werte ungleich sind, gibt Assert den Wert False zurück, und der Test schlägt fehl.
Hinweis: Diese Assert-Anweisung erhält einen dritten Parameter Delta, in dem der Wert 0.05 übergeben wird. Für diese Überladung der Assert.AreEqual-Methode ist der Delta-Parameter erforderlich, um einen möglichen Rundungsfehler auszugleichen, der definitionsbedingt bei Gleitkommatypen wie Double auftreten kann.
Sie haben die generierte DebitTest-Methode der BankAccountTest-Testklasse ausgeführt und festgestellt, dass Änderungen erforderlich sind. Anschließend haben Sie diese Änderungen durchgeführt. Die Methode kann nun verwendet werden, um die Genauigkeit der Debit-Methode in Ihrer Anwendung zu testen.
Ausführen eines Komponententests und Korrigieren des Codes
Voraussetzung: Führen Sie die in der Vorgehensweise Ausführen und Anpassen einen Komponententests angegebenen Schritte aus.
So führen Sie einen Komponententest aus und korrigieren den Code
Führen Sie den Debit-Test erneut durch. Klicken Sie in der Datei BankAccountTest.cs mit der rechten Maustaste auf die DebitTest()-Methode und dann auf Tests durchführen.
Während der Ausführung wird im Fenster Testergebnisse in der Spalte Ergebnis der Teststatus Wird ausgeführt angezeigt. Nachdem der Testlauf beendet wurde, wird als Ergebnis für den Test Fehler angezeigt.
Doppelklicken Sie im Fenster Testergebnisse auf die Zeile für den betreffenden Test.
Dadurch wird die Seite Testergebnisdetails mit der Fehlermeldung "Assert.AreEqual fehlgeschlagen. Es wurde eine Differenz nicht größer als <0.05> zwischen dem erwarteten Wert <0.77> und dem tatsächlichen Wert <23.21> erwartet." geöffnet. Diese Zahlen weisen auf eine fehlerhafte mathematische Berechnung hin. Da die DebitTest-Methode der BankAccountTest-Klasse die Debit-Methode der BankAccount-Klasse testet, beginnen Sie mit einer Überprüfung der Debit-Methode.
Öffnen Sie die Datei Class1.cs, und führen Sie einen Bildlauf zur Debit-Methode durch.
Beachten Sie die folgende Zuweisung:
m_balance += amount;
Diese Zuweisung addiert einen Betrag zu einem Saldo. In einer Debit-Methode muss der Betrag jedoch subtrahiert werden. Ändern Sie diese Zeile wie folgt:
m_balance -= amount;
Führen Sie den Debit-Test erneut aus.
Im Fenster Testergebnisse wird in der Spalte Ergebnis der Status Erfolgreich für DebitTest angezeigt.
Hinweis: Sie mussten das Projekt nach den Änderungen im Quellcode nicht neu erstellen, da Projekte beim Ausführen eines Tests automatisch neu erstellt werden.
Sie haben einen funktionierenden Komponententest erstellt und mithilfe des Tests einen Fehler im Code entdeckt und behoben.
Erstellen und Ausführen eines Komponententests für eine private Methode
Voraussetzung: Führen Sie die in der Vorgehensweise Ausführen eines Komponententests und Korrigieren des Codes angegebenen Schritte aus.
So erstellen Sie einen Komponententest für eine private Methode und führen ihn aus
Öffnen Sie die Datei Class1.cs im Bankprojekt.
Klicken Sie mit der rechten Maustaste auf die FreezeAccount()-Methode, und wählen Sie Komponententests erstellen aus.
Das Dialogfeld Komponententests erstellen wird angezeigt.
In der Struktur ist nur die FreezeAccount()-Methode ausgewählt.
(Optional) Klicken Sie auf Filter, und deaktivieren Sie dann Nicht öffentliche Elemente anzeigen. Beachten Sie, dass die FreezeAccount()-Methode aus der Liste untergeordneter Methoden der BankAccount-Klasse entfernt wird. Klicken Sie erneut auf Filter, und wählen Sie dann Nicht öffentliche Elemente anzeigen aus, um die FreezeAccount()-Methode erneut anzuzeigen.
Stellen Sie sicher, dass die FreezeAccount()-Methode ausgewählt ist, und klicken Sie anschließend auf OK.
Dadurch wird eine neue Datei für den privaten Accessor mit dem Namen Bank.accessor erstellt. Sie enthält spezielle Accessormethoden, die vom Test verwendet werden, um private Methoden in der BankAccount-Klasse indirekt aufzurufen. Die neue Datei wird im Projektmappen-Explorer im Ordner Testverweise angezeigt.
Öffnen Sie die Datei BankAccountTest.cs, und führen Sie einen Bildlauf zur FreezeAccountTest()-Methode durch.
Ändern Sie den Code für die FreezeAccountTest ()-Methode, damit er wie folgt lautet. Geänderte oder neue Bereiche werden angegeben:
public void FreezeAccountTest() { BankAccount_Accessor target = new BankAccount_Accessor("Mr. Bryan Walton", 11.99); // TODO: Initialize to an appropriate value target.FreezeAccount(); // Assert.Inconclusive("A method that does not return a value cannot be verified."); bool creditAccount = false; // False means account could be credited: Fail test. // Try to credit account try { target.Credit(1.00); } catch (System.Exception) { // Threw exception. FreezeAccount worked correctly: Pass test. creditAccount = true; } // Assert fails if 'creditAccount' condition is false. Fail test. Assert.IsTrue(creditAccount, "Was able to credit account."); }
Führen Sie den FreezeAccountTest-Test aus.
Im Fenster Testergebnisse wird in der Spalte Ergebnis als abschließender Teststatus Erfolgreich angezeigt. Dies ist das erwartete Ergebnis, da der Test die Credit()-Methode nach dem Sperren des Kontos durch den Aufruf der FreezeAccount()-Methode aufrief.
Sie haben eine private Methode hinzugefügt, einen neuen Komponententest für diese Methode erstellt und den Test ausgeführt. Sie können den Test mehrfach ausführen und andere Grenzwerte (z. B. 15.00) für die Variable balance benutzen.
Nächste Schritte
Beim Testen von Assemblycode können Sie durch die Erfassung von Codeabdeckungsdaten den Anteil des getesteten Projektcodes ermitteln. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Ausführen von Tests und Anzeigen der Codeabdeckung.
Sie können Tests auch in einer Befehlszeile statt in Visual Studio ausführen. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Verwenden des Befehlszeilen-Testprogramms.
Siehe auch
Aufgaben
Beispiel für einen Komponententest