Exemplarische Vorgehensweise: Erstellen und Ausführen von Komponententests
Diese exemplarische Vorgehensweise führt Sie durch das Erstellen, Ausführen und Anpassen verschiedener Tests mit Microsoft Visual Studio 2010. 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. Dann können Sie Änderungen am Projektcode vornehmen und die Tests erneut ausführen.
Tipp
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. Weitere Informationen finden Sie unter Beispielprojekt zum Erstellen von Komponententests.
Vorbereiten der exemplarischen Vorgehensweise
So bereiten Sie die exemplarische Vorgehensweise vor
Öffnen Sie Visual Studio 2010 Premium.
Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.
Das Dialogfeld Neues Projekt wird angezeigt.
Klicken Sie unter Installierte Vorlagen auf Visual C#.
Klicken Sie in der Liste der Anwendungstypen auf Klassenbibliothek.
Geben Sie im Feld Name die Bezeichnung Bank ein, und klicken Sie dann auf OK.
Tipp
Wenn der Name "Bank" bereits verwendet wird, wählen Sie einen anderen Namen für das Projekt aus.
Das neue Bank-Projekt wird erstellt und im Projektmappen-Explorer angezeigt, wobei der Code-Editor mit der Datei Class1.cs geöffnet wird.
Tipp
Wenn die Datei Class1.cs nicht im Code-Editor geöffnet wird, doppelklicken Sie im Projektmappen-Explorer auf die Datei Class1.cs, um diese zu öffnen.
Kopieren Sie den Quellcode aus Beispielprojekt zum Erstellen von Komponententests.
Ersetzen Sie den ursprünglichen Inhalt von Class1.cs mit dem Code aus Beispielprojekt zum Erstellen von Komponententests.
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
Wenn die Datei Class1.cs nicht im Code-Editor geöffnet wird, doppelklicken Sie im Projektmappen-Explorer auf die Datei Class1.cs, um das Bank-Projekt zu öffnen.
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.
Tipp
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.
Zum Feststellen der Werte, die für die DebitTest-Methode verwendet werden, ö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).
Tipp
Diesen erwarteten Balance-Wert (0,77) verwenden Sie später in dieser exemplarischen Vorgehensweise.
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;
Fügen Sie in der CreditTest-Methode "Mr. Bryan Walton", 11,99) dem neuen BankAccount hinzu.
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
Klicken Sie im Menü Test auf Fenster, und wählen Sie dann Testansicht aus.
Das Fenster Testansicht wird angezeigt.
Klicken Sie mit der rechten Maustaste auf DebitTest, und klicken Sie auf Auswahl ausführen.
Falls das Fenster Testergebnisse noch nicht geöffnet ist, wird dies jetzt nachgeholt. Der DebitTest-Test wird ausgeführt.
Während der Ausführung des Tests wird im Fenster Testergebnisse in der Spalte Ergebnis der Teststatus als Wird ausgeführt angezeigt. Nachdem der Testlauf beendet wurde, wird als Ergebnis für den Test Nicht eindeutig angezeigt.
Klicken Sie im Fenster Testergebnisse mit der rechten Maustaste auf die Zeile, die den Test darstellt, und klicken Sie dann auf Testergebnisdetails anzeigen.
Auf der Seite Testergebnisdetails wird die Fehlermeldung "Fehler bei Assert.Inconclusive" angezeigt. 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.
Tipp
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.
Klicken Sie im Fenster Testergebnisse mit der rechten Maustaste auf die Zeile, die den Test darstellt, und klicken Sie dann auf Testergebnisdetails anzeigen.
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.
Tipp
Sie mussten das Testprojekt 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 für die Variable balance andere Grenzwerte (z. B. 15,00) verwenden.
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.
Wenn Sie Visual Studio 2010 Ultimate verwenden, können Sie mithilfe der Komponententests Auslastungstests zum Isolieren von Leistungs- und Belastungsproblemen erstellen.