Delen via


Overzicht: Test-first-ontwikkeling met de functie Genereren op basis van gebruik

In dit onderwerp wordt gedemonstreert hoe u de functie Genereren uit gebruik gebruikt, die ondersteuning biedt voor test-first-ontwikkeling.

Test-first-ontwikkeling is een benadering van softwareontwerp waarbij u eerst eenheidstests schrijft op basis van productspecificaties en vervolgens de broncode schrijft die nodig is om de tests te laten slagen. Visual Studio ondersteunt test-first-ontwikkeling door nieuwe typen en leden in de broncode te genereren wanneer u deze voor het eerst in uw testcases verwijst voordat ze worden gedefinieerd.

Visual Studio genereert de nieuwe typen en leden met minimale onderbreking van uw werkstroom. U kunt stubs maken voor typen, methoden, eigenschappen, velden of constructors zonder uw huidige locatie in code te verlaten. Wanneer u een dialoogvenster opent om opties voor het genereren van typen op te geven, wordt de focus onmiddellijk terug naar het huidige geopende bestand wanneer het dialoogvenster wordt gesloten.

De functie Generate From Usage kan worden gebruikt met testframeworks die zijn geïntegreerd met Visual Studio. In dit onderwerp wordt het Microsoft Unit Testing Framework gedemonstreerd.

Opmerking

De instructies in dit artikel illustreren de meest recente versie van de interactieve ontwikkelervaring (IDE) die beschikbaar is in Visual Studio. Uw computer kan verschillende namen of locaties weergeven voor sommige elementen van de gebruikersinterface. Mogelijk gebruikt u een andere versie van Visual Studio of andere omgevingsinstellingen. Zie De IDE-personaliseren voor meer informatie.

Een Windows Class Library-project en een testproject maken

  1. Maak in C# of Visual Basic een nieuw Windows Class Library-project . Geef deze GFUDemo_VB een naam of GFUDemo_CS, afhankelijk van de taal die u gebruikt.

  2. Klik in Solution Explorer met de rechtermuisknop op het oplossingspictogram bovenaan en kiesNieuw projecttoevoegen>.

  3. Maak een nieuw Unit Test-project (.NET Framework) aan.

Een verwijzing toevoegen naar het klassebibliotheekproject

  1. Klik in Solution Explorer onder uw eenheidstestproject met de rechtermuisknop op de vermelding Verwijzingen en kies Verwijzing toevoegen.

  2. Selecteer Projecten in het dialoogvenster Reference Manager en selecteer vervolgens het klassebibliotheekproject.

  3. Kies OK om het dialoogvenster Verwijzingsbeheer te sluiten.

  4. Sla uw oplossing op. U bent nu klaar om te beginnen met het schrijven van tests.

Een nieuwe klasse genereren op basis van een eenheidstest

  1. Het testproject bevat een bestand met de naam UnitTest1. Dubbelklik op dit bestand in Solution Explorer om het te openen in de code-editor. Er is een testklasse en testmethode gegenereerd.

  2. Zoek de declaratie voor klasse UnitTest1 en wijzig de naam ervan in AutomobileTest.

    Opmerking

    IntelliSense biedt nu twee alternatieven voor voltooiing van intelliSense-instructies: voltooiingsmodus en suggestiemodus. Gebruik de suggestiemodus voor situaties waarin klassen en leden worden gebruikt voordat ze worden gedefinieerd. Wanneer een IntelliSense-venster is geopend, kunt u op CtrlAlt-spatiebalk++ drukken om tussen de voltooiingsmodus en de suggestiemodus te schakelen. Zie IntelliSense gebruiken voor meer informatie. De suggestiemodus helpt u bij het typen Automobile in de volgende stap.

  3. Zoek de methode en wijzig de TestMethod1() naam ervan in DefaultAutomobileIsInitializedCorrectly(). Maak in deze methode een nieuw exemplaar van een klasse met de naam Automobile, zoals wordt weergegeven in de volgende schermopnamen. Er verschijnt een golflijn die een compilatiefout aangeeft en een Snelle acties-lampje verschijnt in de linkermarge, of direct eronder als u er met de muisaanwijzer overheen gaat.

    Snelle acties in Visual Basic

    Snelle acties in C#

  4. Kies of klik op de gloeilamp Snelle acties . Er wordt een foutbericht weergegeven waarin staat dat het type Automobile niet is gedefinieerd. U krijgt ook enkele oplossingen te zien.

  5. Klik op Nieuw type genereren om het dialoogvenster Type genereren te openen. Dit dialoogvenster bevat opties voor het genereren van het type in een ander project.

  6. Klik in de lijst Project op GFUDemo_VB of GFUDemo_CS om Visual Studio opdracht te geven om het bestand toe te voegen aan het klassebibliotheekproject in plaats van het testproject. Als dit nog niet is geselecteerd, kiest u Nieuw bestand maken en noemt u het Automobile.cs of Automobile.vb.

    Dialoogvenster Nieuw type genereren

  7. Klik op OK om het dialoogvenster te sluiten en het nieuwe bestand te maken.

  8. Kijk in Solution Explorer onder het knooppunt GFUDemo_VB of GFUDemo_CS project om te controleren of het nieuwe Automobile.vb - of Automobile.cs bestand aanwezig is. De focus blijft in de code-editor in AutomobileTest.DefaultAutomobileIsInitializedCorrectly, zodat u uw test met een minimale onderbreking kunt blijven schrijven.

Een eigenschapsstub genereren

Stel dat de productspecificatie aangeeft dat de Automobile klasse twee openbare eigenschappen heeft met de naam Model en TopSpeed. Deze eigenschappen moeten worden geïnitialiseerd met standaardwaarden van "Not specified" en -1 door de standaardconstructor. Met de volgende eenheidstest wordt gecontroleerd of de standaardconstructor de eigenschappen instelt op de juiste standaardwaarden.

  1. Voeg de volgende coderegel toe aan de DefaultAutomobileIsInitializedCorrectly testmethode.

    Assert.IsTrue((myAuto.Model == "Not specified") && (myAuto.TopSpeed == -1));
    
  2. Omdat de code naar twee niet-gedefinieerde eigenschappen op Automobile verwijst, verschijnt er een golvende onderstreping onder Model en TopSpeed. Beweeg de muisaanwijzer over Model, kies de gloeilamp met snelle acties en selecteer vervolgens eigenschap 'Automobile.Model' genereren.

  3. Genereer op dezelfde manier een eigenschapstub voor de TopSpeed eigenschap.

    In de Automobile klasse worden de typen nieuwe eigenschappen correct afgeleid van de context.

Een stub genereren voor een nieuwe constructor

We gaan nu een testmethode maken waarmee een constructor-stub wordt gegenereerd om de Model en TopSpeed eigenschappen te initialiseren. Later voegt u meer code toe om de test te voltooien.

  1. Voeg de volgende extra testmethode toe aan uw AutomobileTest klasse.

    [TestMethod]
    public void AutomobileWithModelNameCanStart()
    {
        string model = "Contoso";
        int topSpeed = 199;
        Automobile myAuto = new Automobile(model, topSpeed);
    }
    
  2. Klik op de gloeilamp Snelle Acties onder de rode kronkel, en klik vervolgens op Constructor genereren in 'Automobile'.

    In het Automobile klassebestand ziet u dat de nieuwe constructor de namen heeft onderzocht van de lokale variabelen die worden gebruikt in de constructoraanroep, eigenschappen met dezelfde namen in de Automobile klasse heeft gevonden en code heeft opgegeven in de hoofdtekst van de constructor om de argumentwaarden in de Model en TopSpeed eigenschappen op te slaan.

  3. Nadat u de nieuwe constructor hebt gegenereerd, wordt er een golvende onderstreping weergegeven onder de aanroep naar de standaardconstructor in DefaultAutomobileIsInitializedCorrectly. Het foutbericht geeft aan dat de Automobile klasse geen constructor heeft die nul argumenten gebruikt. Als u een expliciete standaardconstructor wilt genereren die geen parameters heeft, klikt u op de gloeilamp Snelle acties en klikt u vervolgens op Constructor genereren in 'Automobile'.

Een stub genereren voor een methode

Stel dat de specificatie aangeeft dat een nieuwe Automobile in een IsRunning-toestand kan worden geplaatst als de Model- en TopSpeed-eigenschappen anders dan de standaardwaarden zijn ingesteld.

  1. Voeg de volgende regels toe aan de AutomobileWithModelNameCanStart methode.

    myAuto.Start();
    Assert.IsTrue(myAuto.IsRunning == true);
    
  2. Klik op het Snelle Acties foutlicht voor de myAuto.Start methode-aanroep en klik vervolgens op Genereer methode 'Automobile.Start'.

  3. Klik op de Snelle acties-gloeilamp voor de IsRunning eigenschap en klik vervolgens op eigenschap 'Automobile.IsRunning' genereren.

    De Automobile klasse bevat nu een methode met de naam Start() en een eigenschap met de naam IsRunning.

De tests uitvoeren

  1. KiesAlle testsuitvoeren> in het menu Testen.

    > Met deopdrachtAlle tests uitvoeren worden alle tests uitgevoerd in testframeworks die zijn geschreven voor de huidige oplossing. In dit geval zijn er twee tests en beide mislukken, zoals verwacht. De DefaultAutomobileIsInitializedCorrectly test mislukt omdat de Assert.IsTrue voorwaarde retourneert False. De AutomobileWithModelNameCanStart test mislukt omdat de Start methode in de Automobile klasse een uitzondering genereert.

    Het venster Testresultaten wordt weergegeven in de volgende afbeelding.

    Testresultaten die zijn mislukt

  2. Dubbelklik in het venster Testresultaten op elke rij met testresultaten om naar de locatie van elke test te gaan.

De broncode implementeren

  1. Voeg de volgende code toe aan de standaardconstructor, zodat de Modelen IsRunningTopSpeed eigenschappen allemaal zijn geïnitialiseerd op de juiste standaardwaarden van"Not specified", -1en False (of false voor C#).

    public Automobile()
    {
        this.Model = "Not specified";
        this.TopSpeed = -1;
        this.IsRunning = true;
    }
    
  2. Wanneer de Start methode wordt aangeroepen, moet de IsRunning vlag alleen true worden ingesteld als de Model of TopSpeed eigenschappen zijn ingesteld op iets anders dan de standaardwaarde. Verwijder de NotImplementedException uit de hoofdtekst van de methode en voeg de volgende code toe.

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

Voer de tests opnieuw uit

  • Wijs in het menu Testen de optie Uitvoeren aan en klik vervolgens op Alle tests.

    Deze keer zijn de tests geslaagd. Het venster Testresultaten wordt weergegeven in de volgende afbeelding.

    Geslaagde testresultaten