Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här avsnittet visar hur du använder funktionen Generera från användning , som stöder test-first-utveckling.
Test-first development är en metod för programvarudesign där du först skriver enhetstester baserat på produktspecifikationer och sedan skriver den källkod som krävs för att testerna ska lyckas. Visual Studio stöder test-first-utveckling genom att generera nya typer och medlemmar i källkoden när du först refererar till dem i dina testfall innan de definieras.
Visual Studio genererar de nya typerna och medlemmarna med minimalt avbrott i arbetsflödet. Du kan skapa stubs för typer, metoder, egenskaper, fält eller konstruktorer utan att lämna din aktuella plats i kod. När du öppnar en dialogruta för att ange alternativ för typgenerering återgår fokus omedelbart till den aktuella öppna filen när dialogrutan stängs.
Funktionen Generera från användning kan användas med testramverk som integreras med Visual Studio. I det här avsnittet visas Microsoft Unit Testing Framework.
Anmärkning
Anvisningarna i den här artikeln illustrerar den senaste versionen av den interaktiva utvecklingsupplevelsen (IDE) som är tillgänglig i Visual Studio. Datorn kan visa olika namn eller platser för vissa av användargränssnittselementen. Du kanske använder en annan version av Visual Studio eller andra miljöinställningar. Mer information finns i Anpassa IDE-.
Skapa ett Windows-klassbiblioteksprojekt och ett testprojekt
Skapa ett nytt Windows-klassbiblioteksprojekt i C# eller Visual Basic. Namnge den
GFUDemo_VBellerGFUDemo_CS, beroende på vilket språk du använder.Högerklicka på lösningsikonen längst upp i Solution Explorer och välj Lägg till>nytt projekt.
Skapa ett nytt projekt för enhetstestprojekt (.NET Framework).
Lägga till en referens till klassbiblioteksprojektet
I Solution Explorer högerklickar du på posten Referenser under ditt enhetstestprojekt och väljer Lägg till referens.
I dialogrutan Referenshanteraren väljer du Projekt och sedan klassbiblioteksprojektet.
Välj OK för att stänga dialogrutan Referenshanteraren .
Spara din lösning. Nu är du redo att börja skriva tester.
Generera en ny klass från ett enhetstest
Testprojektet innehåller en fil med namnet UnitTest1. Dubbelklicka på den här filen i Solution Explorer för att öppna den i kodredigeraren. En testklass och testmetod har genererats.
Leta upp deklarationen för klassen
UnitTest1och byt namn på den tillAutomobileTest.Anmärkning
IntelliSense tillhandahåller nu två alternativ för slutförande av IntelliSense-instruktion: slutförandeläge och förslagsläge. Använd förslagsläge för situationer där klasser och medlemmar används innan de definieras. När ett IntelliSense-fönster är öppet kan du trycka på Ctrl+Alt+Space för att växla mellan slutförandeläge och förslagsläge. Mer information finns i Använda IntelliSense . Förslagsläget hjälper dig när du skriver
Automobilei nästa steg.TestMethod1()Leta upp metoden och byt namn på den tillDefaultAutomobileIsInitializedCorrectly(). I den här metoden skapar du en ny instans av en klass med namnetAutomobile, enligt följande skärmbilder. En vågig understrykning visas, vilket indikerar ett kompileringsfel. En Quick Actions-ikon med en felindikator visas i vänstermarginalen eller direkt under understrykningen om du hovrar över den.
Välj eller klicka på glödlampan Snabbåtgärder . Ett felmeddelande visas som anger att typen
Automobileinte har definierats. Du får också några lösningar.Klicka på Generera ny typ för att öppna dialogrutan Generera typ . Den här dialogrutan innehåller alternativ som inkluderar att generera typen i ett annat projekt.
I listan Projekt klickar du på GFUDemo_VB eller GFUDemo_CS för att instruera Visual Studio att lägga till filen i klassbiblioteksprojektet i stället för testprojektet. Om den inte redan är markerad väljer du Skapa ny fil och namnger den Automobile.cs eller Automobile.vb.
Klicka på OK för att stänga dialogrutan och skapa den nya filen.
I Solution Explorer tittar du under projektnoden GFUDemo_VB eller GFUDemo_CS för att kontrollera att den nya Automobile.vb - eller Automobile.cs filen finns där. I kodredigeraren är fokus fortfarande i
AutomobileTest.DefaultAutomobileIsInitializedCorrectly, vilket gör att du kan fortsätta att skriva testet med ett minimum av avbrott.
Generera en egenskapsstub
Anta att produktspecifikationen anger att Automobile klassen har två offentliga egenskaper med namnet Model och TopSpeed. Dessa egenskaper måste initieras med standardvärdena "Not specified" och -1 av standardkonstruktorn. Följande enhetstest kontrollerar att standardkonstruktorn anger egenskaperna till rätt standardvärden.
Lägg till följande kodrad i
DefaultAutomobileIsInitializedCorrectlytestmetoden.Eftersom koden refererar till två odefinierade egenskaper på
Automobilevisas en vågig understrykning underModelochTopSpeed. Hovra överModeloch välj Snabbåtgärder-indikatorn, och välj sedan Generera egenskapen 'Automobile.Model'.Generera en egenskapsstub för
TopSpeedegenskapen på samma sätt.AutomobileI klassen härleds typerna av de nya egenskaperna korrekt från kontexten.
Generera en stub för en ny konstruktor
Nu ska vi skapa en testmetod som genererar en konstruktorstub för att initiera egenskaperna Model och TopSpeed. Senare lägger du till mer kod för att slutföra testet.
Lägg till följande ytterligare testmetod i klassen
AutomobileTest.Klicka på felglödlampan "Snabbåtgärder" under den röda sicksacklinjen och klicka sedan på Generera konstruktor i 'Automobile'.
Observera att den
Automobilenya konstruktorn i klassfilen har undersökt namnen på de lokala variabler som används i konstruktoranropet, hittat egenskaper som har samma namn iAutomobileklassen och angett kod i konstruktorns brödtext för att lagra argumentvärdena iModelegenskaperna ochTopSpeed.När du har genererat den nya konstruktorn visas en vågig understrykning under anropet till standardkonstruktorn i
DefaultAutomobileIsInitializedCorrectly. Felmeddelandet anger attAutomobileklassen inte har någon konstruktor som tar noll argument. Om du vill generera en explicit standardkonstruktor som inte har parametrar klickar du på glödlampan snabbåtgärder och klickar sedan på Generera konstruktor i "Automobile".
Generera en stub för en metod
Anta att specifikationen anger att en ny Automobile kan placeras i ett IsRunning tillstånd om dess Model och TopSpeed egenskaper är inställda på något annat än standardvärdena.
Lägg till följande rader i
AutomobileWithModelNameCanStartmetoden.Klicka på fel glödlampan för snabbåtgärder för metodanropet
myAuto.Startoch klicka sedan på Generera metoden 'Automobile.Start'.Klicka på glödlampan Snabbåtgärder för
IsRunningegenskapen och klicka sedan på Generera egenskapen "Automobile.IsRunning".Klassen
Automobileinnehåller nu en metod med namnetStart()och en egenskap med namnetIsRunning.
Kör testerna
På testmenyn väljer du Kör>alla tester.
Kommandot Kör>alla tester kör alla tester i alla testramverk som är skrivna för den aktuella lösningen. I det här fallet finns det två tester och båda misslyckas som förväntat. Testet
DefaultAutomobileIsInitializedCorrectlymisslyckas eftersom villkoretAssert.IsTruereturnerarFalse. TestetAutomobileWithModelNameCanStartmisslyckas eftersomStartmetoden iAutomobileklassen genererar ett undantag.Fönstret Testresultat visas i följande bild.
I fönstret Testresultat dubbelklickar du på varje testresultatrad för att gå till platsen för varje test.
Implementera källkoden
Lägg till följande kod i standardkonstruktorn så att
Model,TopSpeedochIsRunningegenskaperna alla initieras till deras rätta standardvärden av"Not specified",-1ochFalse(ellerfalseför C#).När
Start-metoden anropas bör den ställaIsRunning-flaggan till true endast omModel- ellerTopSpeed-egenskapen är inställd på något annat än deras standardvärde.NotImplementedExceptionTa bort från metodtexten och lägg till följande kod.
Kör testerna igen
På testmenyn pekar du på Kör och klickar sedan på Alla tester.
Den här gången godkänns testerna. Fönstret Testresultat visas i följande bild.