Ramverk som stöds
Vilka testramverk stöder liveenhetstestning och vilka är de lägsta versioner som stöds?
Live-enhetstestning fungerar med de tre populära enhetstestningsramverken som anges i tabellen nedan. Den lägsta version som stöds av deras kort och ramverk visas också i tabellen. Enhetstestningsramverken är alla tillgängliga från NuGet.org.
Test Framework | 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.7.0 | 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.
.NET Core-stöd
Fungerar liveenhetstestning med .NET Core?
Ja. Live-enhetstestning fungerar med .NET Core och .NET Framework.
Konfiguration
Varför fungerar inte liveenhetstestning när jag aktiverar den?
Fönstret Utdata (när listrutan Test av liveenheter har valts) bör tala om för dig varför liveenhetstestning inte fungerar. Live-enhetstestning kanske inte fungerar av någon av följande orsaker:
Om NuGet-paket som refereras av projekten i lösningen inte har återställts fungerar inte liveenhetstestning. Det här problemet bör lösas genom att utföra en explicit version av lösningen eller återställa NuGet-paket i lösningen innan du aktiverar liveenhetstestning.
Om du använder MSTest-baserade tester i dina projekt måste du ta bort referensen till
Microsoft.VisualStudio.QualityTools.UnitTestFramework
och lägga till referenser till de senaste MSTest NuGet-paketenMSTest.TestAdapter
(en lägsta version av 1.1.11 krävs) ochMSTest.TestFramework
(en lägsta version av 1.1.11 krävs). Mer information finns i avsnittet "Testramverk som stöds" i artikeln Använda liveenhetstestning i Visual Studio.Minst ett projekt i lösningen bör ha antingen en NuGet-referens eller direktreferens till xUnit-, NUnit- eller MSTest-testramverket. Det här projektet bör också referera till ett motsvarande NuGet-paket för Visual Studio-testkort.
Varför byggs inte mitt projekt?
Byggfelen rapporteras till utdatafönstret när listrutan Testning av liveenheter har valts. Det finns några vanliga problem som orsakas av felaktig konfiguration i installationsguiden för som kan orsaka byggproblem i liveenhetstestning.
Om egenskapen Workspace Root är för lång är det möjligt att versionen misslyckas på grund av undantag som anger att sökvägen är för lång.
Om egenskapen Repository Root inte pekar mot lagringsplatsens rot fylls arbetsytan i med fel uppsättning filer.
För git-lagringsplatser undviker egenskapen Exclude-filer vanligtvis att kopiera de filer som anges i gitignore- fil. Det går dock att checka in filer till git-lagringsplatsen som ignoreras, eller så kan du köra verktyg som automatiskt genererar filer, men de genereras inte under bygget. I dessa fall bör alternativet "<Anpassad>" väljas och en anpassad uppsättning regler som endast listar artefaktmapparna ska visas.
Förutom de problem som beskrevs tidigare kan följande projektkonfigurationer som kanske inte skapas korrekt.
Om projektberoenden anges som en global lösningskonfiguration och inte som
ProjectReferences
för varje projekt, kan liveenhetstestning skapa en felaktig uppsättning projekt. Åtgärda detta genom att lägga till explicita referenser mellan projekt.Tills en liveenhetstestningsspellista har valts kommer liveenhetstestning inte att skapa några projekt. Du kan åtgärda detta genom att inkludera några tester i spelningslistan Live Unit Testing.
Om du använder MSTest-baserade tester i dina projekt måste du ta bort referensen till
Microsoft.VisualStudio.QualityTools.UnitTestFramework
och lägga till referenser till de senaste MSTest NuGet-paketenMSTest.TestAdapter
(en lägsta version av 1.1.11 krävs) ochMSTest.TestFramework
(en lägsta version av 1.1.11 krävs). Mer information finns i testramverk som stöds.Minst ett projekt i lösningen bör ha antingen en NuGet-referens eller direktreferens till xUnit-, NUnit- eller MSTest-testramverket. Det här projektet bör också referera till ett motsvarande NuGet-paket för Visual Studio-testkort. Visual Studio-testkortet kan också refereras via en .runsettings-fil. .runsettings-filen måste ha en post som i följande exempel:
<RunSettings>
<RunConfiguration>
<TestAdaptersPaths>path-to-your-test-adapter</TestAdaptersPaths>
</RunConfiguration>
</RunSettings>
Stöder Live Unit Testing källgeneratorprojekt?
LiveEnhetstestning kan inte skapa källgeneratorprojekt med instrumentation. På grund av hur C#-kompilatorn konfigurerar sammansättningsinläsning för källgeneratorer kan försöket att skapa källgeneratorprojekt med instrumentation inte läsa in liveenhetstestningssammansättningar.
Du kan ange <ExcludeFromCodeCoverage>true</ExcludeFromCodeCoverage>
egenskap i csproj-källgeneratorns filer för att skapa dessa projekt i liveenhetstestning.
Så här löser du felet "Det gick inte att läsa in filen eller sammansättningen Microsoft.Bcl.AsyncInterfaces"?
Live Unit Testing kör bygget i en egen process av prestandaskäl.
Om den här separata byggprocessen orsakar ett fel kan du ange <UseInProcMSBuildNode>false</UseInProcMSBuildNode>
till filen .lutconfig för att säkerställa att allt bygge sker i MSBuild-processen.
Varför kan mina tester inte köras?
Ett vanligt problem är att inte alla filer kopieras till testmappen. Du kan behöva lägga till några Testberoende för liveenhetstestning objekt i csproj- filer.
Ett annat problem är tidsgränser. Eftersom Live Unit Testing kör tester på obestämd tid avbryts automatiskt en körning om testerna körs för länge. Du kan öka tidsgränsen i projektets wizard.
Felaktig täckning efter uppgradering
Varför visar Live Unit Testing felaktig täckning när du har uppgraderat testkortet som refereras i Visual Studio Projects till den version som stöds?
Om flera projekt i lösningen refererar till NuGet-testkortpaketet måste var och en av dem uppgraderas till den version som stöds.
Kontrollera att MSBuild-.props fil som importerats från testkortpaketet också är korrekt uppdaterad. Kontrollera NuGet-paketversionen/-sökvägen för importen, som vanligtvis finns längst upp i projektfilen, som följande:
<Import Project="..\packages\xunit.runner.visualstudio.2.2.0\build\net20\xunit.runner.visualstudio.props" Condition="Exists('..\packages\xunit.runner.visualstudio.2.2.0\build\net20\xunit.runner.visualstudio.props')" />
Anpassa versioner
Kan jag anpassa mina liveenhetstestningsversioner?
Om din lösning kräver anpassade steg för att skapa för instrumentation (liveenhetstestning) som inte krävs för den "vanliga" icke-instrumenterade versionen kan du lägga till kod i projektet eller .targets filer som söker efter egenskapen BuildingForLiveUnitTesting
och utför anpassade steg före/efter bygget. Du kan också välja att ta bort vissa byggsteg (till exempel att publicera eller generera paket) eller lägga till byggsteg (till exempel kopiera krav) till en liveenhetstestningsversion baserat på den här projektegenskapen. Att anpassa ditt bygge baserat på den här egenskapen ändrar inte din vanliga version på något sätt och påverkar bara byggen av liveenhetstestning.
Det kan till exempel finnas ett mål som producerar NuGet-paket under en vanlig version. Du vill förmodligen inte att NuGet-paket ska genereras efter varje redigering du gör. Så du kan inaktivera det målet i liveenhetstestningsversionen genom att göra något som liknar följande:
<Target Name="GenerateNuGetPackages" BeforeTargets="AfterBuild" Condition="'$(BuildingForLiveUnitTesting)' != 'true'">
<Exec Command='"$(MSBuildThisFileDirectory)..\tools\GenPac" '/>
</Target>
Testutforskaren jämfört med liveenhetstestning
Hur skiljer sig körningstester från testutforskaren från att köra tester i liveenhetstestning?
Det finns flera skillnader:
När du kör eller felsöker tester från Test Explorer-fönstret körs regelbundna binärfiler, medan Live Unit Testing kör instrumenterade binärfiler. Om du vill felsöka instrumenterade binärfiler, lägger du till ett Debugger.Launch-metodanrop i testmetoden gör att felsökningsprogrammet startas när den metoden körs (inklusive när den körs av liveenhetstestning) och du kan sedan bifoga och felsöka den instrumenterade binära filen. Vi hoppas dock att instrumentationen är transparent för de flesta användarscenarier och att du inte behöver felsöka instrumenterade binärfiler.
LiveEnhetstestning skapar inte en ny programdomän för att köra tester, men tester som körs från Test Explorer fönstret skapar en ny programdomän.
Live Unit Testing kör tester i varje testsammansättning sekventiellt. I Test Explorerkan du välja att köra flera tester parallellt.
Test Explorer kör tester i en enkeltrådad lägenhet (STA) som standard, medan Live Unit Testing kör tester i en flertrådad lägenhet (MTA). Om du vill köra MSTest-tester i STA i Live Unit Testing, dekorerar du testmetoden eller den innehållande klassen med attributet
<STATestMethod>
eller<STATestClass>
som finns iMSTest.STAExtensions 1.0.3-beta
NuGet-paketet. För NUnit dekorerar du testmetoden med attributet<RequiresThread(ApartmentState.STA)>
och för xUnit med attributet<STAFact>
.
Exkludera tester
Hur undantar jag tester från att delta i liveenhetstestning?
Se avsnittet "Inkludera och exkludera testprojekt och testmetoder" i artikeln Använda liveenhetstestning i Visual Studio för den användarspecifika inställningen. Att inkludera eller exkludera tester är användbart när du vill köra en specifik uppsättning tester för en viss redigeringssession eller spara dina egna personliga inställningar.
För lösningsspecifika inställningar kan du använda attributet System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute programmatiskt för att exkludera metoder, egenskaper, klasser eller strukturer från att instrumenteras av liveenhetstestning. Dessutom kan du ange egenskapen <ExcludeFromCodeCoverage>
till true
i projektfilen så att hela projektet inte kan instrumenteras. Live-enhetstestning kör fortfarande de tester som inte har instrumenterats, men deras täckning visualiseras inte.
Du kan också kontrollera om Microsoft.CodeAnalysis.LiveUnitTesting.Runtime
läses in i den aktuella programdomänen och inaktivera tester baserat på varför. Du kan till exempel göra något som liknar följande med xUnit:
[ExcludeFromCodeCoverage]
public class SkipLiveFactAttribute : FactAttribute
{
private static bool s_lutRuntimeLoaded = AppDomain.CurrentDomain.GetAssemblies().Any(a => a.GetName().Name ==
"Microsoft.CodeAnalysis.LiveUnitTesting.Runtime");
public override string Skip => s_lutRuntimeLoaded ? "Test excluded from Live Unit Testing" : "";
}
public class Class1
{
[SkipLiveFact]
public void F()
{
Assert.True(true);
}
}
Kontinuerliga versioner
Varför fortsätter Live Unit-testningen att skapa min lösning hela tiden även om jag inte gör några ändringar?
Din lösning kan skapas även om du inte gör ändringar om byggprocessen genererar källkod som är en del av själva lösningen, och dina byggmålfiler inte har rätt indata och utdata angivna. Mål bör ges en lista över indata och utdata så att MSBuild kan utföra lämpliga up-todatumkontroller och avgöra om en ny version krävs.
Testning av liveenheter startar en version när den identifierar att källfilerna har ändrats. Eftersom bygget av din lösning genererar källfiler hamnar Live Unit Testing i en oändlig build-loop. Om dock indata och utdata för målet kontrolleras när liveenhetstestning startar den andra versionen (efter att ha identifierat de nyligen genererade källfilerna från föregående version) bryter den ut från build-loopen eftersom kontrollerna för indata och utdata indikerar att allt är up-to-date.
Redigeringsikoner
Varför ser jag inga ikoner i redigeraren trots att Live Unit Testing verkar köra testerna baserat på meddelandena i utdatafönstret?
Du kanske inte ser ikoner i redigeraren om de sammansättningar som liveenhetstestning körs på inte instrumenteras av någon anledning. Till exempel är liveenhetstestning inte kompatibelt med projekt som anger <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>
. I det här fallet måste byggprocessen uppdateras för att antingen ta bort den här inställningen eller ändra den till true
för att liveenhetstestning ska fungera.
Avbilda loggar
Hur samlar jag in mer detaljerade loggar till felrapporter?
Du kan göra flera saker för att samla in mer detaljerade loggar:
Gå till Tools>Options>Live Unit Testing och ändra loggningsalternativet till Utförlig. Utförlig loggning gör att mer detaljerade loggar visas i fönstret Utdata.
Ange variabeln
LiveUnitTesting_BuildLog
användarmiljö till namnet på filen som du vill använda för att avbilda MSBuild-loggen. Detaljerade MSBuild-loggmeddelanden från Live Unit Testing-versioner kan sedan hämtas från filen.Ange variabeln
LiveUnitTesting_TestPlatformLog
användarmiljö till1
för att avbilda testplattformsloggen. Detaljerade testplattformsloggmeddelanden från liveenhetstestkörningar kan sedan hämtas från[Solution Root]\.vs\[Solution Name]\log\[VisualStudio Process ID]
.Skapa en miljövariabel på användarnivå med namnet
VS_UTE_DIAGNOSTICS
och ange den till 1 (eller valfritt värde) och starta om Visual Studio. Nu bör du se massor av loggning på fliken Output – Tests i Visual Studio.
Arbetsytemapp
Kan jag redigera filerna under arbetsytans mapp?
Nej, du bör inte öppna eller redigera filerna under arbetsytemappens bygg- och testkataloger. Live-enhetstestning bör hantera alla filer i mappen src för att hålla dem synkroniserade mellan -lagringsplatsens rot och arbetsyterot.
Dev-enheter
Har liveenhetstestning stöd för Dev Drive för standardarbetsytans rot?
Ja, men du måste se till att den är aktiverad. Om du använder en Dev Drive kontrollerar du att det projicerade filsystemet (ProjFS) filter är aktiverat. Följande kommando aktiverar till exempel ProjFS och Windows Defender:
fsutil devdrv setfiltersallowed PrjFlt,WdFilter