Unit-Testing mit Visual Studio

In den bisherigen Ausgaben von Datenbankentwickler haben wir ohne moderne Entwurfsmuster programmiert und beispielsweise den Code von Fenstern im Code behind-Modul gespeichert. Das wollen wir nun ändern und das Entwurfsmuster Model-View-ViewModel (kurz MVVM) vorstellen. Das ermöglicht durch eine Zwischenschicht zwischen der Benutzeroberfläche und dem Entity Data Model das automatisierte Testen der meisten Funktionen einer Anwendung. Durch automatisiertes Testen, hier Unit-Testing genannt, können wir Tests für unseren Code definieren, die wir immer wieder per Mausklick durchführen können. So können Sie Änderungen am Code durchführen und sich blitzschnell versichern, dass der Code noch so läuft wie gewünscht. Im vorliegenden Artikel erläutern wir, was es mit Unit-Testing auf sich hat und wie Sie es unter Visual Studio einsetzen.

Tests von Softwareanwendungen sind meist aufwendig, vor allem, wenn sie manuell durchgeführt werden. Das größte Problem dabei ist: Wenn sich eine Funktion der Anwendung ändert, muss man normalerweise zumindest alle damit zusammenhängenden Funktionen erneut testen, was Zeit und Geld kostet. Eine Automatisierung der Tests über die Benutzeroberfläche ist ebenfalls kritisch zu sehen, was den Aufwand betrifft, denn auch hier können kleinste Änderungen dazu führen, dass die Tests nicht mehr funktionieren und ebenfalls angepasst werden müssen.

Wenn Sie mit einem Entwurfsmuster wie dem eingangs erwähnten MVVM arbeiten, wobei es eine Schicht gibt, welche die Anwendungslogik enthält und die Daten der Benutzeroberfläche liefert, aber keine Abhängigkeit von der Benutzeroberfläche hat, können Sie diese Schicht mit der Anwendungslogik auch ohne den Umweg über die Benutzeroberfläche testen. Dazu initialisieren Sie die entsprechenden Objekte und testen deren Methoden.

Weil sich diese Tests meist auf einzelne Klassen oder Komponenten beziehen, werden sie im Allgemeinen Unit-Tests genannt.

Beispielprojekt für die Unit-Tests erstellen

Da wir in diesem Magazin meist Desktop-Anwendungen programmieren, wollen wir auch als Beispiel für die Unit-Tests ein solches Projekt nutzen. Also legen Sie ein neues Projekt des Typs WPF-App (.NET-Framework) an und legen für dieses den Namen UnitTestBeispiel fest.

Im Anschluss an diesen Vorgang sollte Visual Studio geöffnet sein und im Projektmappen-Explorer das neu erstellte Projekt anzeigen.

Mögliche Konfigurationen für Unit-Tests

Wenn Sie Unittests durchführen wollen, haben Sie verschiedene Möglichkeiten – zum Beispiel die folgenden:

  • Sie erstellen ein eigenes Projekt, das nur die Unittests enthält und das Sie gemeinsam mit dem Testprojekt in einer Projektmappe verwalten.
  • Sie erstellen die zum Testen notwendigen Elemente innerhalb des zu testenden Projekts.

Eines der Ziele beim Unit-Testing ist, den Code des zu testenden Projekts nicht aufzublähen. Deshalb fügen wir die Unit-Tests auch nicht zu dem Projekt hinzu, das wir testen wollen, sondern legen ein eigenes Projekt dafür an. Dieses Projekt soll allerdings in einer Projektmappe mit dem zu testenden Projekt landen. Deshalb gehen wir wie folgt vor, um das Testprojekt zu erstellen:

  • Betätigen Sie den Menübefehl Datei|Neu|Projekt… (siehe Bild 1).
  • Anlegen eines neuen Projekts

    Bild 1: Anlegen eines neuen Projekts

  • Wählen Sie im Dialog Neues Projekt erstellen mit dem linken Auswahlfeld den Eintrag Visual Basic und mit dem rechten Auswahlfeld den Eintrag Test aus und finden Sie die verfügbaren Testprojekte in der Liste. Hier wählen wir die Projektvorlage NUnit-Testprojekt aus (siehe Bild 2).
  • Auswahl des Projekttyps

    Bild 2: Auswahl des Projekttyps

  • Im folgenden Schritt legen Sie den neuen Projektnamen fest. Diesen wählen wir so, dass er mit dem Namen des zu testenden Projekts beginnt und hängen die Zeichenfolge .Unit.Test an. Außerdem stellen wir hier ein, dass das neue Projekt der bestehenden Projektemappe hinzugefügt werden soll (siehe Bild 3).
  • Hinzufügen des Projekts zur bestehenden Projektmappe

    Bild 3: Hinzufügen des Projekts zur bestehenden Projektmappe

  • Schließlich legen Sie noch das Zielframework für das neue Projekt fest.

Das gleiche Ergebnis erhalten Sie übrigens auch, wenn Sie den Menübefehl Datei|Hinzufügen|Neues Projekt… betätigen – Sie brauchen dann im Dialog Neues Projekt konfigurieren nicht mehr festzulegen, dass das neue Projekt zur aktuellen Projektmappe hinzugefügt werden soll.

Das neue Unit-Test-Projekt

Das Anlegen des Projekts hat zwei sichtbare Änderungen in unserem Projekt bewirkt. Die erste ist, dass wir im Projektmappen-Explorer unter unserem eigentlichen Projekt auch das neu angelegte Unit-Test-Projekt vorfinden (siehe Bild 4).

Das neue Testprojekt in der Projektmappe des zu testenden Projekts

Bild 4: Das neue Testprojekt in der Projektmappe des zu testenden Projekts

Die zweite Änderung ist das Klassenmodul UnitTest1.vb, das wir im Codefenster von Visual Studio vorfinden (siehe Bild 5). Die Bestandteile schauen wir uns gleich genauer an.

Die Vorlage für eine Testklasse

Bild 5: Die Vorlage für eine Testklasse

Verweis zum Unit-Test-Projekt hinzufügen

Bevor wir uns die Unit-Test-Vorlage ansehen, die zum Testprojekt hinzugefügt wurde, wollen wir noch einen Verweis zum Testprojekt hinzufügen.

Dieser soll auf das zu testende Projekt verweisen. Um das zu erledigen, klicken Sie im Projektmappen-Explorer unter dem Testprojekt mit der rechten Maustaste auf den Eintrag Abhängigkeiten und wählen den Kontextmenübefehl Projektverweis hinzufügen… aus (siehe Bild 6).

Hinzufügen eines Projektverweises

Bild 6: Hinzufügen eines Projektverweises

Der nun erscheinende Verweis-Manager zeigt direkt die Projektmappe des zu testenden Projekts an. Hier setzen Sie einen Haken vor den Eintrag UnitTestBeispiel und schließen den Dialog wieder (siehe Bild 7).

Hinzufügen des Verweises auf das zu testende Projekt

Bild 7: Hinzufügen des Verweises auf das zu testende Projekt

Die Unit-Test-Vorlage

Die unter dem Namen UnitTest1.vb hinzugefügte Klasse importiert zunächst den Namespace NUnit.Framework:

Imports NUnit.Framework

Dann deklariert sie einen Namespace namens Unittests, der eine erste Testklasse namens Tests enthält:

Namespace Unittests
     Public Class Tests

Hier finden wir einen Bereich, der mit dem Attribut SetUp versehen ist und eine Methode namens Setup enthält.

Dieser Methode können Sie Anweisungen hinzufügen, welche vor dem Aufruf einer jeden Testmethode ausgeführt werden:

         <SetUp>
         Public Sub Setup()
         End Sub

Danach folgen die eigentlichen Testmethoden. Diese werden mit dem Attribut Test versehen und sehen wie herkömmliche Methoden aus. Sie benötigen allerdings den Aufruf einer Methode der Assert-Klasse. Im Beispiel der Testvorlage lautet diese Methode Pass. Pass heißt, dass der Test bestanden wurde:

         <Test>
         Public Sub Test1()
             Assert.Pass()
         End Sub
     End Class
End Namespace

Den ersten Unit-Test durchführen

Um diesen Unit-Test zu starten, nutzen Sie die dafür vorgesehene Benutzeroberfläche.

Diese erscheint, wenn Sie den Menübefehl Test|Alle Tests ausführen aufrufen, automatisch (siehe Bild 8).

Starten der Tests

Bild 8: Starten der Tests

Sie sehen dann im Bereich Test-Explorer den Ablauf und das Ergebnis des ersten Tests. Dieser verläuft mit dem Ergebnis Bestanden, was vorhersehbar war – Assert.Pass liefert immer einen bestandenen Test (siehe Bild 9).

Ergebnis des ersten Tests

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins DATENBANKENTWICKLER:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 200 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar