Konfigurera och använda liveenhetstestning

När du utvecklar ett program kör Live Unit Testing automatiskt alla berörda enhetstester i bakgrunden och visar resultatet och kodtäckningen i realtid. När du ändrar koden ger Live Unit Testing feedback om hur dina ändringar påverkade befintliga tester och om den nya koden som du lade till omfattas av ett eller flera befintliga tester. Den här feedbacken påminner dig om att skriva enhetstester när du gör felkorrigeringar eller lägger till nya funktioner.

När du använder liveenhetstestning för dina tester bevaras data om status för dina tester. Med hjälp av bevarade data kan liveenhetstestning erbjuda överlägsen prestanda när du kör dina tester dynamiskt som svar på kodändringar.

Live-enhetstestning är endast tillgängligt i Enterprise-utgåvan av Visual Studio för projekt som är inriktade på .NET Core eller .NET Framework.

Testramverk som stöds

Live-enhetstestning fungerar med de tre populära enhetstestningsramverken som anges i följande tabell. Den minsta version som stöds av deras adaptrar och ramverk visas också. Enhetstestningsramverken är alla tillgängliga från NuGet.org.

Testramverk Lägsta version av Visual Studio-adapter Minsta version av ramverket
xUnit.net xunit.runner.visualstudio version 2.2.0-beta3-build1187 xunit 1.9.2
NUnit NUnit3TestAdapter version 3.5.1 NUnit version 3.5.0
MSTest MSTest.TestAdapter 1.1.4-preview MSTest.TestFramework 1.0.5-preview

Om du har äldre MSTest-baserade testprojekt som refererar till Microsoft.VisualStudio.QualityTools.UnitTestFramework och du inte vill flytta till de nyare MSTest NuGet-paketen uppgraderar du till Visual Studio 2019 eller Visual Studio 2017.

I vissa fall kan du behöva uttryckligen återställa de NuGet-paket som ett projekt refererar till för att live-enhetstestning ska fungera. Du har två alternativ:

  • Återställ genom att göra en explicit kompilering av lösningen. Välj Skapa>återskapa lösning på visual studio-menyn på den översta nivån.
  • Återställ paketen i lösningen. Högerklicka på lösningen och välj Återställ NuGet-paket.

Configure

Första gången du startar liveenhetstestning för en lösning kan du med en installationsguide konfigurera hur liveenhetstestning ska skapa och köra tester.

När liveenhetstestning stoppas kan du också öppna installationsguiden genom att gå till Testa>liveenhetstestning>Konfigurera liveenhetstestning för lösning.

När liveenhetstestning körs skapar den en arbetsyta, som är en kopia av den ursprungliga lagringsplatsen. Live-enhetstester tillämpar sedan alla osparade ändringar som du har gjort i Visual Studio på arbetsytan, utför en kompilering, gör en testkörning och rapporterar om den senaste kodtäckningen.

Det första du bör konfigurera med hjälp av guiden är var filerna ska kopieras från och var de ska kopieras till.

Skärmbild som visar konfigurationsguiden för liveenhetstestning sida 1.

Lagringsplatsrot

Lagringsplatsens rot anger den mapp som ska kopieras för att skapa arbetsytan Testning av liveenheter. Det bör vara rotmappen för lagringsplatsen, dvs. den ska innehålla alla källor, binärfiler och verktyg. Om lösningsfilen inte finns under lagringsplatsens rot kan lagringsplatsens rot behöva ändras.

Arbetsytans rot

Arbetsytans rot anger mappen där Live Unit Testing behåller en klon av kodförrådet. Se upp för undantag som anger att sökvägen är för lång. Som standard skapas roten under din hemmapp. Men om du normalt behöver skapa lagringsplatsen under enhet C kan arbetsytans rot dock justeras till något som liknar C:\lut\Repo.

Ange de exkluderade filerna

Inte alla filer ska kopieras till arbetsytan Live Unit Testing. Artefakter som genereras under bygget bör undantas från kopieringen så att de vanliga versionerna inte stör testversionerna för liveenheter. Det vanliga nuget restore kommandot bör inte heller störa kommandot Live Unit Testing nuget restore .

Som standard utesluter Live Unit Testing ett av de två mönstren av filer:

  • För Git-lagringsplatser kopieras inte filer som anges i gitignore-filen till arbetsytan Testning av liveenheter.
  • För icke-Git-lagringsplatser kopieras inte en grundläggande lista med mappar, till exempel bin/ och obj/, till arbetsytan Testning av liveenheter.

För mer komplexa lagringsplatser kan du behöva ange en egen ignorerande fil. Välj alternativet "<Anpassad>" i guiden. När du har valt Nästa visas innehållet i en skräddarsydd ignoreringsfil som Live Unit Testing skapar när du har slutfört guiden. Det är lutignore-filen.

Anmärkning

En anpassad lutignore-fil behövs för vissa Git-lagringsplatser eftersom det är möjligt att kontrollera filer till Git-lagringsplatsen som också ignoreras av gitignore-filen . Utan en anpassad lutignore-fil kopierar inte Live Unit Testing dessa filer, vilket kan leda till byggfel.

Lutignore-filstruktur

Lutignore-filen använder samma format som en gitignore-fil. Den bör innehålla regler som matchar mapparna eller filerna som genererades under bygget så att de inte kopieras till arbetsytan. För de flesta av standardprojektmallarna räcker följande ignorera-fil:

[Bb]in
[Oo]bj
# WILL NOT COPY ANY BIN AND OBJ FOLDERS TO THE LIVE UNIT TESTING WORKSPACE

Om lagringsplatsen har en enda byggmapp bör ignorera-filen i stället lista den mappen:

[Aa]rtifacts/
# WILL NOT COPY THE ARTIFACTS FOLDER TO THE LIVE UNIT TESTING WORKSPACE

Om lagringsplatsen innehåller några andra verktyg i byggmappen bör dessa verktyg undantas i uppsättningen matchande mönster:

[Aa]rtifacts/
![Aa]rtifacts/tools/
# WILL NOT COPY THE ARTIFACTS FOLDER TO THE LIVE UNIT TESTING WORKSPACE
# HOWEVER IT WILL COPY THE TOOLS SUBFOLDER THAT MIGHT CONTAIN TOOLS AND UTILITIES

Byggalternativ

Den andra delen av guidens konfigurationssida är där du konfigurerar byggalternativ:

  • Generera PDF-filer: För att påskynda bygget genererar liveenhetstestning inte PDF-filer under byggen. Med dessa symbolfiler kan du gå till stackspårningarna när testfel inträffar.
  • Skapa med flera CPU-kärnor: Som standard utför liveenhetstestning byggen med hjälp av flera CPU-kärnor, vilket förbättrar byggtiden. Om datorn blir långsammare eller om lösningen inte kan skapas med hjälp av flera processorer väljer du inte det här alternativet.

Testkörningsalternativ

Den sista delen av guidens konfigurationssida är där du konfigurerar testkörningsalternativen:

  • Tidsgräns för testfall: Vissa av testerna kan ta lång tid att köra. Om du anger det här fältet avbryts automatiskt körningar om något av testerna överskrider en viss tidsperiod. Testerna kan avbrytas automatiskt.
  • Använd flera processorer: Som standard försöker liveenhetstestning använda flera processorer för att påskynda körningsprestandan. Om datorn blir långsammare eller om lösningen inte kan köra tester parallellt väljer du inte det här alternativet. Dessa scenarier kan till exempel inträffa om flera tester försöker skriva/läsa från samma filsökvägar.

Mer konfiguration

Konfigurera liveenhetstestning genom att välja Verktygsalternativ> på menyraden i Visual Studio på den översta nivån.

I fönstret Alternativ expanderar du avsnittet Alla inställningar>Test>Live Unit Testing.

Skärmbild som visar konfigurationsalternativ för liveenhetstestning.

i dialogrutan Alternativ utökar du avsnittet Live-enhetstestning>allmänt.

Skärmbild som visar konfigurationsalternativ för liveenhetstestning.

När liveenhetstestning har aktiverats (se Starta, pausa och stoppa liveenhetstestning) kan du öppna alternativen igen genom att> väljaTest liveenhetstestningsalternativ>.

De konfigurerbara alternativen är:

  • Om Live-enhetstestning pausar när en lösning byggs och felsöks.

  • Om liveenhetstestning pausar när ett systems batterikraft understiger ett angivet tröskelvärde.

  • Möjligheten att ta bort alla bevarade data. Den här funktionen är användbar när liveenhetstestning beter sig på ett oförutsägbart eller oväntat sätt, vilket tyder på att bevarade data är skadade.

  • Den maximala mängden minne som testprocesser för liveenheter kan förbruka.

  • Nivån av information som skrivs till fönstret Utdata för liveenhetstestning.

    Alternativen omfattar ingen loggning (Ingen), endast felmeddelanden (Fel), fel och informationsmeddelanden (Info, standard) eller all utförlig information (Utförlig information).

    Du kan också visa utförliga utdata i fönstret Testutdata för liveenhet genom att tilldela värdet 1 till en miljövariabel på användarnivå med namnet VS_UTE_DIAGNOSTICS. Starta sedan om Visual Studio.

    Om du vill samla in detaljerade MSBuild-loggmeddelanden från Live Unit Testing i en fil anger du LiveUnitTesting_BuildLog miljövariabeln på användarnivå till namnet på filen som ska innehålla loggen.

Anpassa din version för liveenhetstestning

För mer komplexa lösningar kan det vara nödvändigt att anpassa versionen ytterligare. Det kanske till exempel inte är nödvändigt att skapa översättningsfiler under testkörningar. Om du vill snabba upp byggena kan du inaktivera bygget av översättningsfilen med Live Unit Testing. Du kan göra det genom att ändra projektfilerna.

Lägga till åsidosättningar för liveenhetstestning

Om din lösning kräver anpassade steg för att skapa för instrumentering (Live Unit Testing) som inte behövs för det "vanliga" icke-instrumenterade bygget, kan du lägga till kod i projektet eller .targets-filer som kontrollerar efter egenskapen och utför anpassade byggsteg innan/efter bygget.

Du kan till exempel skriva följande exempel för att lägga till ett annat mål som bara körs för liveenhetstestning:

<Target Name="GenerateNuGetPackages" BeforeTargets="AfterBuild" Condition="'$(BuildingForLiveUnitTesting)' == 'true'">
    <Exec Command='"$(MSBuildThisFileDirectory)..\tools\GenPac" '/>
</Target>

Du kan använda BuildingForLiveUnitTesting egenskapen för att inaktivera vissa uppgifter som inte ska köras för testversioner. Live-enhetstestning sätter <RunAnalyzers>false</RunAnalyzers> för att inaktivera analysatorer för tester.

Testberoenden för enhetstestning i realtid

Det är möjligt att inte alla filer kopierades som krävs för att testerna ska kunna köras. Direktenhetstestning skapar en separat mapp där den kör tester. Det här arrangemanget gör att byggen kan utföras medan testerna körs, men inte alla filer från byggmappen kopieras till testmappen.

Vanligtvis lägger du till testberoenden av någon av två orsaker:

  • Dina tester beror på filer under källträdet. Testerna undersöker till exempel innehållet i resx-filerna eller läser kanske några konfigurationsfiler.
  • Dina tester beror på vissa bibliotek som de refererar till. Ett test kör till exempel en körbar fil som skapas som ett beroende.

Anmärkning

Testberoenden måste finnas i katalogen som anges som lagringsplatsrot i installationsguiden.

I båda fallen kopierar liveenhetstestning som standard inte dessa filer i syfte att minimera antalet filer som måste kopieras för att köra ett test. Du måste uttryckligen ange dessa filer med hjälp LiveUnitTestingTestDependency av egenskapen om de behövs för en testkörning. Anta till exempel att vi har följande layout:

SRC/
  CONSOLE_UTILITY/
  TEST_PROJECT/
ARTIFACTS/
  CONSOLE_UTILITY/NET472/DEBUG/
  TEST_PROJECT/NET472/DEBUG/

När du skapar dessa projekt med Live-enhetstestning kopieras Artifacts/Test_Project endast som standard till testmappen. Om du vill lägga till källor eller console_utility till testmappen lägger du till följande exempel i test_project.csproj:

<LiveUnitTestingTestDependency Include=”$(RepoRoot)/Src/ConsoleUtility” />
<LiveUnitTestingTestDependency Include=”$(RepoRoot)/Artifacts/ConsoleUtility/net472/$(Configuration)/</LiveUnitTestingTestDependency” />

Starta, pausa och stoppa

Om du vill aktivera liveenhetstestning väljer du Test Live Unit Testing Start ( Testa>liveenhetstestning>) på visual studio-menyn på den översta nivån. När liveenhetstestning är aktiverat ändras alternativen som är tillgängliga på liveenhetstestningsmenyn från ett enda objekt, Start, till Pausa och Stoppa:

  • Pausar tillfälligt liveenhetstestning.

    När liveenhetstestning pausas visas inte täckningsvisualisering i redigeraren, men alla data som har samlats in bevaras. Om du vill återuppta liveenhetstestning väljer du Fortsätt på menyn LiveEnhetstestning . Live-enhetstestning gör det nödvändiga arbetet för att komma ikapp med alla ändringar som gjordes när den pausades och uppdaterar glyferna på lämpligt sätt.

  • Stoppa helt stoppar liveenhetstestning. Live Unit Testing tar bort alla data som samlas in.

Om du startar liveenhetstestning i en lösning som inte innehåller ett enhetstestprojekt visas alternativen Pausa och Stoppa på menyn LiveEnhetstestning , men Testning av liveenheter startar inte. Fönstret Utdata visar ett meddelande som börjar: "Inga testadaptrar som stöds refereras av denna lösning...".

När som helst kan du tillfälligt pausa eller helt stoppa liveenhetstestning. Du kanske vill vidta dessa åtgärder, till exempel om du är mitt i en refaktorisering och vet att dina tester inte kommer att fungera ett tag.

Inkludera och exkludera testprojekt och testmetoder

När du startar liveenhetstestning visas fönstret Testverktyg för liveenheter och du uppmanas att välja den uppsättning tester som du vill testa med liveenhetstestning.

Skärmbild som visar verktygsfönstret som visas när Live Unit Testing startar för första gången.

För mindre lösningar där enhetstesterna tar mycket lite tid att köra väljer du Inkludera alla tester, vilket gör att Live Unit Testing kör alla tester.

För större lösningar med många testprojekt kan du styra vilka projekt och enskilda metoder i ett projekt som deltar i liveenhetstestning genom att redigera spellistan. Om du till exempel har en lösning med hundratals testprojekt kan du välja en måluppsättning testprojekt som ska delta i liveenhetstestning.

Du väljer vilken liveenhetstestning som ska köras genom att redigera en liveenhetstestningsspellista, en funktion som fungerar precis som spellistor i Testutforskaren.

Det finns flera sätt att redigera spellistan för enhetstestning live:

  • Verktygsfönster för live-enhetstestning
  • Kodredigerarens fönster
  • Solution Explorer
  • Programmatiskt i testkod

Live-enhetstestning sparar inkluderings-/exkluderingstillståndet som en användarinställning och kommer ihåg det när en lösning stängs och öppnas igen.

Fönstret för live enhetstestning

Du kan använda spellisteredigeraren på fliken Enhetstestning i realtid för att inkludera eller exkludera projekt, namnområden eller klasser från utförande. Välj Redigera spellista i verktygsfönstret.

Du kan välja eller rensa trädvyelementen för att inkludera eller exkludera tester. Om du till exempel kontrollerar ett enskilt test kör Live Unit Testing det vid ändringar. Om du väljer en klass körs även alla tester i klassen och eventuella nya tester som läggs till i klassen.

Skärmbild som visar redigeraren för spellista i Live Unit Testing.

Kodredigerarens fönster

Du kan använda kodredigerarens fönster för att inkludera eller exkludera enskilda testmetoder. Högerklicka på signaturen eller brödtexten för testmetoden i kodredigerarens fönster och välj något av följande alternativ:

  • Testning av liveenheter>Inkludera <vald metod>
  • Testning av liveenheter>Exkludera <vald metod>
  • Enhetstestning i realtid>Exkludera alla utom <vald metod>

Solution Explorer

Om du vill välja enskilda projekt i enhetstester följer du dessa steg när liveenhetstestning har startats:

  1. Högerklicka på lösningen i Solution Explorer och väljExkludera> för att undanta hela lösningen.
  2. Högerklicka på varje testprojekt som du vill inkludera i testerna och välj Inkludera liveenhetstestning>.

Programmatiskt i testkod

Du kan använda ExcludeFromCodeCoverageAttribute attributet för att programmatiskt exkludera metoder, klasser eller strukturer från att rapportera sin täckning i liveenhetstestning.

Använd följande attribut för att exkludera enskilda metoder från liveenhetstestning:

  • xUnit: [Trait("Category", "SkipWhenLiveUnitTesting")]
  • NUnit: [Category("SkipWhenLiveUnitTesting")]
  • MSTest: [TestCategory("SkipWhenLiveUnitTesting")]

Använd följande attribut för att exkludera en hel sammansättning av tester från liveenhetstestning:

  • xUnit: [assembly: AssemblyTrait("Category", "SkipWhenLiveUnitTesting")]
  • NUnit: [assembly: Category("SkipWhenLiveUnitTesting")]
  • MSTest: [assembly: TestCategory("SkipWhenLiveUnitTesting")]

Visa täckningsvisualisering

När Live Unit Testing har aktiverats uppdateras varje kodrad i Visual Studio-editorn för att visa om koden du skriver täcks av enhetstester och om de tester som täcker den klarar sig.

Följande bild visar kodrader med tester som klarar, tester som misslyckas, samt kodrader som inte täcks av tester. Linjer med ett grönt "✔" täcks endast av godkända tester. Rader med ett rött "x" omfattas av ett eller flera misslyckade tester. Linjer med ett blått "➖" omfattas inte av något test.

Skärmbild som visar kodtäckning i Visual Studio.

Visualisering av liveenhetstestningstäckning uppdateras omedelbart när du ändrar kod i kodredigeraren. När redigeringarna bearbetas, ändras visualiseringen för att indikera att data inte är uppdaterade genom att lägga till en rund timerbild under de godkända, misslyckade och inte täckta symbolerna, som följande bild visar.

Skärmbild som visar kodtäckning i Visual Studio med timerikonen.

Hämta information om teststatus

När du hovrar över symbolen för godkända eller misslyckade tester i kodfönstret, kan du se hur många tester som berör den raden. Om du vill se status för de enskilda testerna väljer du symbolen.

Skärmbild som visar teststatus för en symbol i Visual Studio.

Förutom att ange namn och resultat för tester kan du med knappbeskrivningen köra eller felsöka testuppsättningen igen. Om du väljer ett eller flera av testerna i knappbeskrivningen kan du också köra eller felsöka endast dessa tester. Med den här åtgärden kan du felsöka dina tester utan att behöva lämna kodfönstret.

När du felsöker pausar programkörningen, förutom att observera eventuella brytpunkter som du kanske redan har angett, när felsökningsprogrammet kör en Assert metod som returnerar ett oväntat resultat.

När du för muspekaren över ett misslyckat test i verktygstipset expanderas det för att ge mer information om felorsaken, som visas i följande bild. För att gå direkt till ett misslyckat test, dubbelklicka på det i verktygstipset.

Skärmbild som visar information om misslyckade testverktyg i Visual Studio.

När du går till det misslyckade testet anger Live Unit Testing visuellt i metodsignaturen de tester som har:

  • Godkänd (indikeras av en halvfull bägare tillsammans med en grön "|").
  • Misslyckades (anges av en halvfull bägare tillsammans med ett rött "🞩").
  • Deltar inte i liveenhetstestning (indikeras av en halvfull bägare tillsammans med ett blått "➖").

Icke-testmetoder identifieras inte med en symbol. Följande bild illustrerar alla fyra typerna av metoder.

Skärmbild som visar testmetoder i Visual Studio med godkända eller misslyckade symboler.

Diagnostisera och korrigera testfel

Från det misslyckade testet kan du enkelt felsöka produktkoden, göra ändringar och fortsätta utveckla ditt program. Eftersom liveenhetstestning körs i bakgrunden behöver du inte stoppa och starta om liveenhetstestning under felsöknings-, redigerings- och fortsätt-cykeln.

Till exempel orsakades testfelet som visades i föregående bild av ett felaktigt antagande i testmetoden att icke-fabetiska tecken returneras true när de skickas System.Char.IsLower till metoden. När du har korrigerat testmetoden ska alla tester klara sig. Du behöver inte pausa eller stoppa liveenhetstestning.

Fönster för live-enhetstestning

Live-enhetstestning, som liknar Test Explorer, innehåller ett gränssnitt som gör att du kan köra och felsöka tester och analysera testresultat. När liveenhetstestning är aktiverat uppdateras statusen för enhetstester i Test Explorer omedelbart. Du behöver inte uttryckligen köra enhetstesterna.

När liveenhetstestning inte är aktiverat eller stoppas visar Live Unit Testing statusen för enhetstester senast ett test kördes. När du har startat om liveenhetstestning krävs en källkodsändring för att köra testerna igen.

Du kan starta liveenhetstestning genom att välja Test>Live Unit Testing>Start på visual studio-menyn på den översta nivån. Du kan också öppna Liveenhetstestning-fönstret genom att använda Visa>Andra windows>Liveenhetstestning-fönster.

Du kanske märker att vissa tester är nedtonade i fönstret LiveEnhetstestning. När du till exempel stoppar och startar om LiveEnhetstestning tonas alla tester ned i fönstret LiveEnhetstestning, som följande bild visar.

Bleka testresultat indikerar att testet inte ingick i den senaste körningen av Live-enhetstester. Tester körs bara när en ändring av testet eller testets beroenden identifieras. Om det inte sker någon ändring undviker du att köra testet i onödan. I det här fallet är det nedtonade testresultatet fortfarande "uppdaterat", även om det inte var en del av den senaste körningen.

Skärmbild som visar nedtonade tester i TestUtforskaren.

Du kan köra om alla tester som visas som blekta genom att göra en kodändring.

Det finns vissa skillnader mellan liveenhetstestning som körs automatiskt och uppdaterar testresultat och uttryckligen kör tester från TestUtforskaren. Dessa skillnader omfattar:

  • Om du kör eller felsöker tester från testutforskaren körs vanliga binärfiler. Live Unit Testing kör instrumenterade binärfiler.
  • Direktenhetstestning skapar inte en ny programdomän för att köra tester. I stället körs tester från standarddomänen. Tester som körs från testutforskarens fönster skapar en ny programdomän.
  • Live Unit Testing kör tester i varje testsammansättning sekventiellt. I fönstret Testutforskaren kan du välja att köra flera tester parallellt.

Avbryt testkörningar för Live Unit Testing

Live-enhetstestning fortsätter att köra tester när du gör några kodändringar. Om en testkörning pågår och du gör fler kodändringar köar Live Unit Testing en ny testkörning medan den väntar på att den första testkörningen ska slutföras.

När du sparar filer avbryter Live Unit Testing den första körningen och schemalägger omedelbart den köade körningen i stället. Den här processen hjälper till med scenarier där den första körningen skulle ha tagit lång tid att slutföra.

Se även