Freigeben über


Einführung in die testgetriebene Entwicklung mit der Funktion "Erstellen aus Nutzung"

In diesem Thema wird die Verwendung der Funktion "Aus Verwendung generieren" veranschaulicht, die die testgetriebene Entwicklung unterstützt.

Die erste Testentwicklung ist ein Ansatz für das Softwaredesign, bei dem Sie zunächst Komponententests basierend auf Produktspezifikationen schreiben und dann den Quellcode schreiben, der erforderlich ist, um die Tests erfolgreich zu machen. Visual Studio unterstützt die erste Testentwicklung, indem neue Typen und Member im Quellcode generiert werden, wenn Sie sie zuerst in Ihren Testfällen referenzieren, bevor sie definiert werden.

Visual Studio generiert die neuen Typen und Mitglieder mit minimaler Unterbrechung Ihres Workflows. Sie können Stubs für Typen, Methoden, Eigenschaften, Felder oder Konstruktoren erstellen, ohne die aktuelle Position im Code zu verlassen. Wenn Sie ein Dialogfeld öffnen, um Optionen für die Typgenerierung anzugeben, kehrt der Fokus sofort zur aktuellen geöffneten Datei zurück, wenn das Dialogfeld geschlossen wird.

Das Feature „Aus Verwendung generieren“ kann mit Testframeworks verwendet werden, die in Visual Studio integriert sind. In diesem Thema wird das Microsoft Unit Testing Framework veranschaulicht.

Hinweis

Die Anleitungen in diesem Artikel veranschaulichen die neueste Version der interaktiven Entwicklungsumgebung (IDE), die in Visual Studio verfügbar ist. Auf Ihrem Computer werden möglicherweise andere Namen oder Positionen für einige der Elemente der Benutzeroberfläche angezeigt. Möglicherweise verwenden Sie eine andere Version von Visual Studio oder andere Umgebungseinstellungen. Weitere Informationen finden Sie unter Personalisieren der IDE-.

Erstellen eines Windows-Klassenbibliotheksprojekts und eines Testprojekts

  1. Erstellen Sie in C# oder Visual Basic ein neues Windows-Klassenbibliotheksprojekt . Benennen Sie es GFUDemo_VB oder GFUDemo_CS, je nachdem, welche Sprache Sie verwenden.

  2. Klicken Sie im Projektmappen-Explorer oben mit der rechten Maustaste auf das Projektmappensymbol, und wählen Sie "Neues Projekthinzufügen"> aus.

  3. Erstellen Sie ein neues Unit Test Project (.NET Framework) -Projekt.

Hinzufügen eines Verweises auf das Klassenbibliotheksprojekt

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste unter Ihrem Komponententestprojekt auf den Eintrag Verweise und wählen Sie Verweis hinzufügen aus.

  2. Wählen Sie im Dialogfeld "Verweis-Manager " "Projekte " und dann das Klassenbibliotheksprojekt aus.

  3. Wählen Sie 'OK ' aus, um das Dialogfeld "Verweis-Manager " zu schließen.

  4. Speichern Sie Ihre Lösung. Sie können jetzt mit dem Schreiben von Tests beginnen.

Generieren einer neuen Klasse aus einem Komponententest

  1. Das Testprojekt enthält eine Datei mit dem Namen UnitTest1. Doppelklicken Sie im Projektmappen-Explorer auf diese Datei, um sie im Code-Editor zu öffnen. Es wurde eine Testklasse und eine Testmethode generiert.

  2. Suchen Sie die Deklaration für die Klasse UnitTest1 und benennen Sie sie in AutomobileTest um.

    Hinweis

    IntelliSense bietet jetzt zwei Alternativen für den Abschluss der IntelliSense-Anweisung: Abschlussmodus und Vorschlagsmodus. Verwenden Sie den Vorschlagsmodus für Situationen, in denen Klassen und Member verwendet werden, bevor sie definiert werden. Wenn ein IntelliSense-Fenster geöffnet ist, können Sie Strg+Alt+Leertaste drücken, um zwischen Abschlussmodus und Vorschlagsmodus zu wechseln. Weitere Informationen finden Sie unter Verwenden von IntelliSense . Der Vorschlagsmodus hilft Ihnen im nächsten Schritt beim Eingeben von Automobile.

  3. Suchen Sie die TestMethod1() Methode, und benennen Sie sie in DefaultAutomobileIsInitializedCorrectly() um. Erstellen Sie in dieser Methode eine neue Instanz einer Klasse mit dem Namen Automobile, wie in den folgenden Screenshots gezeigt. Eine wellenförmige Unterstreichung, die auf einen Kompilierzeitfehler hindeutet, und eine Fehlerglühbirne für Schnelle Aktionen werden am linken Rand oder direkt unter der Wellenlinie angezeigt, wenn Sie darauf zeigen.

    Schnelle Aktionen in Visual Basic

    Schnelle Aktionen in C#

  4. Klicken Sie auf die Glühbirne Schnellaktionen. Es wird eine Fehlermeldung angezeigt, die besagt, dass der Typ Automobile nicht definiert ist. Sie erhalten auch einige Lösungen vorgestellt.

  5. Klicken Sie auf " Neuen Typ generieren", um das Dialogfeld " Typ generieren " zu öffnen. Dieses Dialogfeld enthält Optionen, die das Generieren des Typs in einem anderen Projekt umfassen.

  6. Klicken Sie in der Projektliste auf GFUDemo_VB oder GFUDemo_CS , Visual Studio anzuweisen, die Datei dem Klassenbibliotheksprojekt anstelle des Testprojekts hinzuzufügen. Wenn sie noch nicht ausgewählt ist, wählen Sie "Neue Datei erstellen" aus, und nennen Sie sie Automobile.cs oder Automobile.vb.

    Dialogfeld

  7. Klicken Sie auf 'OK ', um das Dialogfeld zu schließen und die neue Datei zu erstellen.

  8. Suchen Sie im Projektmappen-Explorer unter dem Projektknoten GFUDemo_VB oder GFUDemo_CS , um zu überprüfen, ob die neue Automobile.vb oder Automobile.cs Datei vorhanden ist. Im Code-Editor befindet sich der Fokus immer noch auf AutomobileTest.DefaultAutomobileIsInitializedCorrectly, was es Ihnen ermöglicht, Ihren Test mit minimaler Unterbrechung fortzusetzen.

Generieren eines Eigenschaftenstubs

Gehen Sie davon aus, dass die Produktspezifikation angibt, dass die Klasse Automobile zwei öffentliche Eigenschaften mit den Namen Model und TopSpeed hat. Diese Eigenschaften müssen mit Standardwerten "Not specified" und -1 vom Standardkonstruktor initialisiert werden. Der folgende Komponententest überprüft, ob der Standardkonstruktor die Eigenschaften auf die richtigen Standardwerte festlegt.

  1. Fügen Sie der Testmethode die folgende Codezeile hinzu DefaultAutomobileIsInitializedCorrectly .

    Assert.IsTrue((myAuto.Model == "Not specified") && (myAuto.TopSpeed == -1));
    
  2. Da der Code auf zwei nicht definierte Eigenschaften in Automobile verweist, wird unter Model und TopSpeed eine wellenförmige Unterstreichung angezeigt. Zeigen Sie auf Model, klicken Sie auf die Fehlerglühbirne Schnellaktionen, und wählen Sie dann Eigenschaft „Automobile.Model“ generieren aus.

  3. Generieren Sie einen Eigenschaftsstub für die TopSpeed Eigenschaft auf die gleiche Weise.

    In der Automobile Klasse werden die Typen der neuen Eigenschaften ordnungsgemäß aus dem Kontext abgeleitet.

Generieren eines Stubs für einen neuen Konstruktor

Jetzt erstellen wir eine Testmethode, die einen Konstruktor-Stub generiert, um die Model und TopSpeed Eigenschaften zu initialisieren. Später fügen Sie weiteren Code hinzu, um den Test abzuschließen.

  1. Fügen Sie der Klasse die folgende zusätzliche Testmethode hinzu AutomobileTest .

    [TestMethod]
    public void AutomobileWithModelNameCanStart()
    {
        string model = "Contoso";
        int topSpeed = 199;
        Automobile myAuto = new Automobile(model, topSpeed);
    }
    
  2. Klicken Sie unterhalb der roten Wellenlinie auf die Fehlerglühbirne Schnellaktionen, und klicken Sie anschließend auf Generate constructor in 'Automobile' (Konstruktor in „Automobile“ generieren).

    Beachten Sie in der Automobile Klassendatei, dass der neue Konstruktor die Namen der lokalen Variablen untersucht hat, die im Konstruktoraufruf verwendet werden, Eigenschaften mit den gleichen Namen in der Automobile Klasse gefunden und Code im Konstruktortext bereitgestellt wurde, um die Argumentwerte in den Model und TopSpeed Eigenschaften zu speichern.

  3. Nachdem Sie den neuen Konstruktor generiert haben, wird eine wellenförmige Unterstreichung unter dem Aufruf des Standardkonstruktors in DefaultAutomobileIsInitializedCorrectlyangezeigt. Die Fehlermeldung gibt an, dass die Automobile Klasse keinen Konstruktor ohne Null Argumente hat. Um einen expliziten Standardkonstruktor zu generieren, der keine Parameter enthält, klicken Sie auf das „Quick Actions“ Fehler-Glühbirnensymbol und dann auf „Konstruktor in 'Automobile' generieren“.

Generieren eines Stubs für eine Methode

Angenommen, die Spezifikation gibt an, dass ein neues Automobile in einen IsRunning Zustand versetzt werden kann, wenn die zugehörigen Model und TopSpeed Eigenschaften auf einen anderen Wert als die Standardwerte festgelegt sind.

  1. Fügen Sie die folgenden Zeilen zur Methode AutomobileWithModelNameCanStart hinzu.

    myAuto.Start();
    Assert.IsTrue(myAuto.IsRunning == true);
    
  2. Klicken Sie auf die Fehlerglühbirne Schnellaktionen für den Methodenaufruf myAuto.Start und dann auf Methode „Automobile.Start“ generieren.

  3. Klicken Sie auf die Glühbirne Schnellaktionen für die IsRunning-Eigenschaft und dann auf Generate method 'Automobile.Start' (Methode „Automobile.Start“ generieren).

    Die Automobile Klasse enthält nun eine Methode namens Start() und eine Eigenschaft mit dem Namen IsRunning.

Ausführen der Tests

  1. Wählen Sie im Menü "Test" die Option"Alle Testsausführen>" aus.

    Der Befehl"Alle Testsausführen>" führt alle Tests in allen Testframeworks aus, die für die aktuelle Lösung geschrieben wurden. In diesem Fall gibt es zwei Tests, und beide schlagen wie erwartet fehl. Der DefaultAutomobileIsInitializedCorrectly Test schlägt fehl, weil die Assert.IsTrue Bedingung False zurückgibt. Der AutomobileWithModelNameCanStart Test schlägt fehl, da die Start Methode in der Automobile Klasse eine Ausnahme auslöst.

    Das Fenster " Testergebnisse " wird in der folgenden Abbildung gezeigt.

    Testergebnisse, die fehlgeschlagen sind

  2. Doppelklicken Sie im Fenster " Testergebnisse " auf jede Ergebniszeile des Tests, um zur Position der einzelnen Tests zu wechseln.

Implementieren des Quellcodes

  1. Fügen Sie dem Standardkonstruktor den folgenden Code hinzu, sodass die ModelTopSpeed Und-Eigenschaften IsRunning alle auf die richtigen Standardwerte von "Not specified", -1und False (oder false für C#) initialisiert werden.

    public Automobile()
    {
        this.Model = "Not specified";
        this.TopSpeed = -1;
        this.IsRunning = true;
    }
    
  2. Wenn die Start-Methode aufgerufen wird, sollte das IsRunning-Flag nur dann auf 'true' gesetzt werden, wenn die Model- oder TopSpeed-Eigenschaften auf einen anderen Wert als ihren Standardwert gesetzt sind. Entfernen Sie die NotImplementedException aus dem Methodentext, und fügen Sie den folgenden Code hinzu.

    public void Start()
    {
        if (this.Model != "Not specified" || this.TopSpeed != -1)
            this.IsRunning = true;
        else
            this.IsRunning = false;
    }
    

Führen Sie die Tests erneut aus

  • Navigieren Sie im Test-Menü zu Ausführen, und klicken Sie dann auf Alle Tests.

    Dieses Mal werden die Tests bestanden. Das Fenster " Testergebnisse " wird in der folgenden Abbildung gezeigt.

    Testergebnisse, die bestanden wurden