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.
Kontrollera att koden fungerar som förväntat genom att skapa och köra enhetstester. Det kallas enhetstestning eftersom du delar upp programmets funktioner i diskreta testbara beteenden som du kan testa som enskilda enheter. Visual Studio Test Explorer är ett flexibelt och effektivt sätt att köra enhetstester och visa deras resultat i Visual Studio. Visual Studio installerar Microsofts enhetstestningsramverk för hanterad och intern kod. Använd ett ramverk för enhetstestning för att skapa enhetstester, köra dem och rapportera resultatet av dessa tester. Kör enhetstester igen när du gör ändringar för att testa att koden fortfarande fungerar korrekt. Visual Studio Enterprise kan göra detta automatiskt med Live Unit Testing, som identifierar tester som påverkas av dina kodändringar och kör dem i bakgrunden när du skriver.
Enhetstestning har störst effekt på kodens kvalitet när den är en integrerad del av arbetsflödet för programvaruutveckling. Så snart du skriver en funktion eller ett annat block med programkod skapar du enhetstester som verifierar kodens beteende som svar på standard-, gräns- och felaktiga fall av indata, och som kontrollerar eventuella explicita eller implicita antaganden som görs av koden. Med testdriven utveckling skapar du enhetstesterna innan du skriver koden, så du använder enhetstesterna som både designdokumentation och funktionella specifikationer.
Test Explorer kan också köra enhetstestramverk från tredje part och öppen källkod som har implementerat Test Explorer-tilläggsgränssnitt. Du kan lägga till många av dessa ramverk via Visual Studio Extension Manager och Visual Studio-galleriet. Mer information finns i Installera testramverk från tredje part.
Du kan snabbt generera testprojekt och testmetoder från koden eller manuellt skapa testerna när du behöver dem. När du använder IntelliTest för att utforska .NET-kod kan du generera testdata och en uppsättning enhetstester. För varje -instruktion i koden genereras en testindata som kör instruktionen. Ta reda på hur du genererar enhetstester för .NET-kod.
Get started
En introduktion till enhetstestning som tar dig direkt till kodning finns i någon av följande artiklar:
Banklösningsexemplet
I den här artikeln använder vi utvecklingen av ett fiktivt program som kallas MyBank som ett exempel. Du behöver inte den faktiska koden för att följa förklaringarna i den här artikeln. Testmetoder skrivs i C# och presenteras med hjälp av Microsoft Unit Testing Framework för Hanterad kod. Begreppen överförs dock enkelt till andra språk och ramverk.
               
              
            
               
              
            
Vårt första försök att utforma MyBank programmet innehåller en kontokomponent som representerar ett enskilt konto och dess transaktioner med banken samt en databaskomponent som representerar funktionerna för att aggregera och hantera enskilda konton.
Vi skapar en Bank lösning som innehåller två projekt:
- Accounts
- BankDB
Vårt första försök att Accounts utforma projektet innehåller en klass för att lagra grundläggande information om ett konto, ett gränssnitt som anger vanliga funktioner för alla typer av konton, som att sätta in och ta ut tillgångar från kontot och en klass som härleds från gränssnittet som representerar ett checkkonto. Vi påbörjar projekt för konton genom att skapa följande källfiler:
- AccountInfo.cs definierar grundläggande information för ett konto. 
- IAccount.cs definierar ett standardgränssnitt - IAccountför ett konto, inklusive metoder för att sätta in och ta ut tillgångar från ett konto och hämta kontosaldot.
- CheckingAccount.cs innehåller klassen - CheckingAccountsom implementerar- IAccountgränssnittet för ett kontrollkonto.
Vi vet av erfarenhet att en sak som ett uttag från ett checkkonto måste göra är att se till att det belopp som tas ut är mindre än kontosaldot. Så vi åsidosätter IAccount.Withdraw metoden i CheckingAccount med en metod som söker efter det här villkoret. Metoden kan se ut så här:
public void Withdraw(double amount)
{
    if(m_balance >= amount)
    {
        m_balance -= amount;
    }
    else
    {
        throw new ArgumentException(nameof(amount), "Withdrawal exceeds balance!");
    }
}
Nu när vi har lite kod är det dags för testning.
Skapa enhetstester med Copilot
Du kan också använda Copilot-snedstreckskommando /tests för att generera enhetstester från kod. Du kan till exempel skriva /tests using NUnit Framework för att generera NUnit-tester. Mer information finns i Använda snedstreckskommandon i Copilot Chat.
Skapa enhetstestprojekt och testmetoder (C#)
För C# är det ofta snabbare att generera ett enhetstestprojekt och enhetsteststommar från din kod. Eller så kan du välja att skapa enhetstestprojektet och testerna manuellt beroende på dina behov. Om du vill skapa enhetstester från kod med ett ramverk från tredje part behöver du ett av dessa tillägg installerat: NUnit eller xUnit. Om du inte använder C# hoppar du över det här avsnittet och går till Skapa enhetstestprojektet och enhetstesterna manuellt.
Generera enhetstestprojekt och enhetsteststubbar
- Högerklicka i kodredigerarens fönster och välj Skapa enhetstester på högerklicksmenyn.   - Anmärkning - Menykommandot Skapa enhetstester är endast tillgängligt för C#-kod. Om du vill använda den här metoden med .NET Core eller .NET Standard krävs Visual Studio 2019 eller senare.   - Anmärkning - Menykommandot Skapa enhetstester är endast tillgängligt för C#-kod. Om du vill använda den här metoden med .NET Core eller .NET Standard krävs Visual Studio 2019 eller senare. 
- Välj OK för att acceptera standardvärdena för att skapa enhetstester, eller ändra de värden som används för att skapa och namnge enhetstestprojektet och enhetstesterna. Du kan välja den kod som läggs till som standard i enhetstestmetoderna.     
- Enhetsteststubbarna skapas i ett nytt enhetstestprojekt för alla metoder i klassen.     
- Gå nu vidare och lär dig hur du skriver dina tester för att göra enhetstestet meningsfullt och eventuella extra enhetstester som du kanske vill lägga till för att noggrant testa koden. 
Skapa enhetstestprojektet och enhetstesterna manuellt
Ett enhetstestprojekt speglar vanligtvis strukturen för ett enda kodprojekt. I MyBank-exemplet lägger du till två enhetstestprojekt med namnet AccountsTests och BankDbTests till Bank lösningen. Testprojektnamnen är godtyckliga, men det är en bra idé att anta en standardnamnkonvention.
Så här lägger du till ett enhetstestprojekt i en lösning:
- Högerklicka på lösningen i Solution Explorer och välj Lägg till>nyttprojekt. 
- Skriv test i sökrutan för projektmallen för att hitta en projektmall för enhetstest för det testramverk som du vill använda. (I exemplen i den här artikeln använder vi MSTest.) 
- På nästa sida namnger du projektet. För att testa - Accounts-projektet i vårt exempel kan du ge projektet namnet- AccountsTests.
- I ditt enhetstestprojekt lägger du till en referens till kodprojektet som testas i vårt exempel i projektet Konton. - Så här skapar du referensen till kodprojektet: - I enhetstestprojektet i Solution Explorer högerklickar du på noden Referenser eller beroenden och väljer sedan Lägg till projektreferens eller Lägg till referens, beroende på vilket som är tillgängligt. 
- Öppna noden Lösning i dialogrutan Referenshanteraren och välj Projekt. Välj kodprojektets namn och stäng dialogrutan. 
 
Varje enhetstestprojekt innehåller klasser som speglar namnen på klasserna i kodprojektet. I vårt exempel AccountsTests skulle projektet innehålla följande klasser:
- AccountInfoTests-klassen innehåller enhetstestmetoderna- AccountInfoför klassen i- Accountsprojektet
- CheckingAccountTests-klassen innehåller enhetstestmetoderna för- CheckingAccountklassen.
Skriv dina tester
Enhetstestramverket som du använder och Visual Studio IntelliSense vägleder dig genom att skriva koden för enhetstesterna för ett kodprojekt. För att köras i Test Explorer kräver de flesta ramverk att du lägger till specifika attribut för att identifiera enhetstestmetoder. Ramverken ger också ett sätt – vanligtvis via kontrollinstruktioner eller metodattribut – att ange om testmetoden har godkänts eller misslyckats. Andra attribut identifierar valfria installationsmetoder vid klassinitiering och före varje testmetod och teardown-metoder som körs efter varje testmetod och innan klassen förstörs.
Mönstret AAA (Ordna, Agera, Assert) är ett vanligt sätt att skriva enhetstester för en metod som testas.
- Avsnittet Ordna i en enhetstestmetod initierar objekt och anger värdet för de data som skickas till metoden som testas. 
- Avsnittet Act anropar metoden som testas med de ordnade parametrarna. 
- Avsnittet Assert verifierar att åtgärden för metoden under test fungerar som förväntat. För .NET används metoder i Assert klassen ofta för verifiering. 
För att testa metoden i CheckingAccount.Withdraw vårt exempel kan vi skriva två tester: en som verifierar metodens standardbeteende och en som verifierar att ett tillbakadragande av mer än saldot misslyckas (följande kod visar ett MSTest-enhetstest som stöds i .NET.). 
              CheckingAccountTests I klassen lägger vi till följande metoder:
[TestMethod]
public void Withdraw_ValidAmount_ChangesBalance()
{
    // arrange
    double currentBalance = 10.0;
    double withdrawal = 1.0;
    double expected = 9.0;
    var account = new CheckingAccount("JohnDoe", currentBalance);
    // act
    account.Withdraw(withdrawal);
    // assert
    Assert.AreEqual(expected, account.Balance);
}
[TestMethod]
public void Withdraw_AmountMoreThanBalance_Throws()
{
    // arrange
    var account = new CheckingAccount("John Doe", 10.0);
    // act and assert
    Assert.ThrowsException<System.ArgumentException>(() => account.Withdraw(20.0));
}
Mer information om Microsofts enhetstestningsramverk finns i någon av följande artiklar:
Ange tidsgränser för enhetstester
Om du använder MSTest-ramverket kan du använda TimeoutAttribute för att ange en tidsgräns för en enskild testmetod:
[TestMethod]
[Timeout(2000)]  // Milliseconds
public void My_Test()
{ ...
}
Så här anger du tidsgränsen till det högsta tillåtna värdet:
[TestMethod]
[Timeout(TestTimeout.Infinite)]  // Milliseconds
public void My_Test ()
{ ...
}
Köra tester i Test Explorer
När du skapar testprojektet visas testerna i TestUtforskaren. Om Test Explorer inte visas väljer du Testa på Visual Studio-menyn, väljer Windows och sedan Testutforskaren (eller trycker på Ctrl + E, T).
               
              
            
               
              
            
När du kör, skriver och kör om dina tester kan Testutforskaren visa resultaten i grupper med misslyckade tester, godkända tester, överhoppade tester och icke körda tester. Du kan välja olika grupper efter alternativ i verktygsfältet.
Du kan också filtrera testerna i valfri vy genom att matcha text i sökrutan på global nivå eller genom att välja ett av de fördefinierade filtren. Du kan köra valfritt val av testerna när som helst. Resultatet av en testkörning visas omedelbart i fältet pass/fail överst i utforskarfönstret. Information om ett testmetodresultat visas när du väljer testet.
Köra och visa tester
Verktygsfältet Test Explorer hjälper dig att identifiera, organisera och köra de tester som du är intresserad av.
               
              
            
               
              
            
Du kan välja Kör alla för att köra alla dina tester (eller trycka på Ctrl + R, V) eller välja Kör för att välja en delmängd av testerna som ska köras (Ctrl + R, T). Välj ett test för att visa information om testet i testinformationsfönstret. Välj Öppna test på högerklicksmenyn (Tangentbord: F12) för att visa källkoden för det valda testet.
Om enskilda tester inte har några beroenden som hindrar dem från att köras i valfri ordning aktiverar du parallell testkörning i inställningsmenyn i verktygsfältet. Detta kan märkbart minska den tid det tar att köra alla tester.
Kör tester efter varje kompilering
Om du vill köra enhetstesterna efter varje lokal version öppnar du inställningsikonen i verktygsfältet Testutforskaren och väljer Kör tester efter build.
Filtrera och gruppera testlistan
När du har ett stort antal tester kan du skriva i sökrutan Test Explorer för att filtrera listan efter den angivna strängen. Du kan begränsa filterhändelsen mer genom att välja från filterlistan.
               
              
            
               
              
            
| Button | Description | 
|---|---|
|   | Om du vill gruppera dina tester efter kategori väljer du knappen Gruppera efter. | 
Mer information finns i Köra enhetstester med Test Explorer.
Frågor och svar
F: Hur felsöker jag enhetstester?
S: Använd Test Explorer för att starta en felsökningssession för dina tester. När du stegar igenom koden med Visual Studio-felsökningsprogrammet tar du dig fram och tillbaka mellan enhetstesterna och projektet som testas. Så här börjar du felsöka:
- I Visual Studio-redigeraren anger du en brytpunkt i en eller flera testmetoder som du vill felsöka. - Anmärkning - Eftersom testmetoder kan köras i valfri ordning anger du brytpunkter i alla testmetoder som du vill felsöka. 
- I Testutforskaren väljer du testmetoderna och väljer sedan Felsöka valda tester på snabbmenyn. 
Läs mer om felsökning av enhetstester.
F: Hur genererar jag kod från mina tester om jag använder TDD?
S: Använd Snabbåtgärder för att generera klasser och metoder i projektkoden. Skriv en instruktion i en testmetod som anropar den klass eller metod som du vill generera och öppna sedan glödlampan som visas under felet. Om anropet är till en konstruktor för den nya klassen väljer du Generera typ på menyn och följer guiden för att infoga klassen i kodprojektet. Om anropet är till en metod väljer du Generera metod på IntelliSense-menyn.
               
              
            
               
              
            
F: Kan jag skapa enhetstester som tar flera uppsättningar data som indata för att köra testet?
              S: Ja. 
              Med datadrivna testmetoder kan du testa ett intervall med värden med en enda enhetstestmetod. Använd ett DataRow- DynamicData eller DataSource -attribut för testmetoden som anger den datakälla som innehåller de variabelvärden som du vill testa.
Den tillskrivna metoden körs en gång för varje rad i datakällan. Test Explorer rapporterar ett testfel för metoden om någon av iterationerna misslyckas. I detaljfönstret testresultat för metoden visas statusmetoden pass/fail för varje rad med data.
Läs mer om datadrivna enhetstester.
F: Kan jag visa hur mycket av min kod som testas av mina enhetstester?
S: Ja. Du kan fastställa hur mycket kod som faktiskt testas av enhetstesterna med hjälp av Visual Studio Code-täckningsverktyget i Visual Studio. Interna och hanterade språk och alla enhetstestramverk som kan köras av Unit Test Framework stöds.
S: Ja. Du kan fastställa hur mycket kod som faktiskt testas av enhetstesterna med hjälp av Visual Studio Code-täckningsverktyget i Visual Studio Enterprise. Interna och hanterade språk och alla enhetstestramverk som kan köras av Unit Test Framework stöds.
Du kan köra kodtäckning på valda tester eller på alla tester i en lösning. I fönstret Resultat för kodtäckning visas procentandelen av produktkodblocken som har testats radvis, funktionellt, klassvis, inom namnrymder, och modulerat.
Om du vill köra kodtäckning för testmetoder i en lösning väljer du Testa>analysera kodtäckning för alla tester.
Täckningsresultat visas i fönstret Kodtäckningsresultat .
               
              
            
               
              
            
Läs mer om kodtäckning.
F: Kan jag testa metoder i min kod som har externa beroenden?
S: Ja. Om du har Visual Studio Enterprise kan Microsoft Fakes användas med testmetoder som du skriver med hjälp av enhetstestramverk för hanterad kod.
Microsoft Fakes använder två metoder för att skapa ersättningsklasser för externa beroenden:
- Stubs genererar ersättningsklasser som härleds från det överordnade gränssnittet för målberoendeklassen. Stub-metoder kan ersättas med offentliga virtuella metoder för målklassen. 
- Shims använder körningsinstrumentation för att omdirigera anrop från en målmetod till en ersättningsshim-metod för icke-virtuella metoder. 
I båda tillvägagångssätten använder du de genererade delegaterna för anrop till beroendemetoden för att specificera det beteende du önskar i testmetoden.
Läs mer om att isolera enhetstestmetoder med Microsoft Fakes.
F: Kan jag använda andra enhetstestramverk för att skapa enhetstester?
S: Ja, följ de här stegen för att hitta och installera andra ramverk. När du har startat om Visual Studio öppnar du lösningen igen för att skapa enhetstesterna och väljer sedan dina installerade ramverk här:
               
              
            
Enhetsteststubar kommer att skapas med det valda ramverket.
F: Hur exporterar jag mitt enhetstestresultat?
S: Du kan använda en .runsettings-fil med antingen kommandoraden eller Visual Studio IDE för att konfigurera enhetstester och ange testresultatfilen. Mer information finns i Elementet LoggerRunSettings.