Kommentar
Å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.
I det här avsnittet ger vi några rekommendationer för hur du testar och validerar funktioner i appar som skapats med Windows App SDK med hjälp av WinUI 3 användargränssnittsfunktioner(UI). Testning är en viktig del av apputvecklingsprocessen – det hjälper dig att fånga buggar tidigt, upprätthålla kodkvaliteten och säkerställa en tillförlitlig användarupplevelse när din app utvecklas. Genom att införliva enhetstester i arbetsflödet kan du på ett säkert sätt omstrukturera kod, lägga till nya funktioner och skicka uppdateringar med vetskapen om att befintliga funktioner fortsätter att fungera som förväntat.
Självstudie: Skapa ett WinUI 3-enhetstestprojekt.
De flesta objekttyper under namnrymderna Microsoft.UI.Xaml måste användas från en UI-tråd i en XAML-programprocess. (Mer information om hur du testar appar som skapats med Windows App SDK som inte använder WinUI 3 finns i följande avsnitt, Testing non-WinUI functionality.)
Anmärkning
Vi rekommenderar att du omstrukturerar all kod som ska testas genom att dra ut den från huvudappprojektet och placera den i ett biblioteksprojekt. Både ditt appprojekt och ditt enhetstestprojekt kan sedan referera till det biblioteksprojektet. I det här avsnittet beskrivs hur du skapar enhetstester för WinUI 3-appar i Visual Studio med hjälp av de inbyggda projektmallarna för enhetstest.
Anmärkning
Enhetstestappen som beskrivs här är skriven i kontexten för ett WinUI 3-program. Detta krävs för alla tester som kör kod som kräver XAML-körningen. Det här projektet skapar en XAML UI-tråd och kör testerna.
I den här tutorialen lär du dig följande:
- Skapa ett WinUI Unit Test App-projekt i Visual Studio.
- Använd Visual Studio Test Explorer.
- Lägg till ett WinUI-klassbiblioteksprojekt för testning.
- Kör tester med Visual Studio Test Explorer.
Förutsättningar
Du måste ha Visual Studio installerat och konfigurerat för WinUI-utveckling. Se Snabbstart: Konfigurera din miljö och skapa ett WinUI 3-projekt.
Skapa ett WinUI Unit Test App-projekt
Börja genom att skapa ett enhetstestprojekt. Projekttypen levereras med alla mallfiler som du behöver.
Öppna Visual Studio och välj Skapa ett nytt projekt i startfönstret.
I fönstret Skapa ett nytt projekt filtrerar du projekt till C#, Windows och WinUI väljer du mallen WinUI Unit Test App och väljer sedan Nästa
[Valfritt] I fönstret Konfigurera det nya projektet ändrar du Projektnamn, Lösningsnamn (avmarkera Placera lösning och projekt i samma katalog) och platsen för projektet.
Välj Skapa.
Köra tester med Test Explorer
När du skapar testprojektet visas dina tester i Test Explorer, som används för att köra enhetstesterna. Du kan också gruppera tester i kategorier, filtrera testlistan, skapa, spara och köra spellistor med tester, felsöka enhetstester och (i Visual Studio Enterprise) analysera kodtäckning.
Filen UnitTests.cs innehåller källkoden för de enhetstester som används av Test Explorer. Som standard skapas de grundläggande exempeltesterna som visas här automatiskt:
namespace WinUITest1
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
Assert.AreEqual(0, 0);
}
// Use the UITestMethod attribute for tests that need to run on the UI thread.
[UITestMethod]
public void TestMethod2()
{
var grid = new Grid();
Assert.AreEqual(0, grid.MinWidth);
}
}
}
Om du inte redan har gjort det skapar du din lösning. På så sätt kan Visual Studio "identifiera" alla tillgängliga tester.
Öppna Testutforskaren. Om den inte visas öppnar du testmenyn och väljer sedan Testutforskaren (eller trycker på Ctrl + E, T).
Visa tester I fönstret Testutforskaren expanderar du alla noder (endast exempeltesterna kommer att finnas i det här läget).
Kör tester.
- Högerklicka på enskilda testnoder och välj Kör.
- Välj ett test och tryck antingen på knappen Spela upp eller tryck på Ctrl + R, T.
- Tryck på knappen Kör alla tester i vyn eller tryck på Ctrl + R, V.
Granska resultatet: När testerna har slutförts visas resultaten i testutforskarens fönster.
Lägga till ett klassbiblioteksprojekt för testning
Lägg till ett nytt projekt i enhetstestlösningen. Högerklicka på lösningen i Prieskumník riešení och välj Lägg till -> Nytt projekt... .
I det här exemplet lägger du till ett WinUI 3-klassbiblioteksprojekt. I fönstret Nytt projekt filtrerar du på C#/Windows/WinUI och väljer WinUI-klassbibliotek.
Välj Nästa och ange ett namn för projektet (i det här exemplet använder
WinUIClassLibrary1vi ) och tryck på Skapa.
Lägg till en ny
UserControli projektet. I Prieskumník riešení högerklickar du på det WinUI 3-klassbiblioteksprojekt som du just lade till och väljer Lägg till -> Nytt objekt från snabbmenyn.
I fönstret Lägg till nytt objekt väljer du noden WinUI i listan Installerade objekt och väljer sedan Användarkontroll i resultatet. Ge kontrollen namnet
UserControl1.
Öppna UserControl1.xaml.cs code-behind-filen. I det här exemplet lägger vi till en ny offentlig metod med namnet
GetSevensom helt enkelt returnerar ett heltal.namespace WinUIClassLibrary1 { public sealed partial class UserControl1 : UserControl { public UserControl1() { this.InitializeComponent(); } public int GetSeven() { return 7; } } }Ange projektet WinUI 3-klassbibliotek som ett beroende av enhetstestprojektet för att aktivera användning av typer från winui 3-klassbiblioteksprojektet. I Prieskumník riešení, under biblioteksklassprojektet, högerklickar du på Dependencies och väljer Lägg till projektreferens.
Välj objektet i
WinUIClassLibrary1listan Projekt .
Skapa en ny testmetod i UnitTests.cs. Eftersom det här testfallet kräver att en XAML-användargränssnittstråd körs, markerar du det med attributet
[UITestMethod]i stället för standardattributet[TestMethod].[UITestMethod] public void TestUserControl1() { WinUIClassLibrary1.UserControl1 userControl1 = new WinUIClassLibrary1.UserControl1(); Assert.AreEqual(7, userControl1.GetSeven()); }Den här nya testmetoden visas nu i Test Explorer som ett av dina enhetstester.
Kör tester.
- Högerklicka på den nya testnoden och välj Kör.
- Välj det nya testet och tryck antingen på knappen Spela upp eller tryck på Ctrl + R, T.
- Tryck på knappen Kör alla tester i vyn eller tryck på Ctrl + R, V.
Testa icke-WinUI-funktioner
I många fall innehåller en app funktioner som inte är beroende av Microsoft.UI.Xaml-typer men som fortfarande behöver testas. Det finns olika verktyg för att testa .NET kod, inklusive MSTest, NUnit och xUnit. Mer information om hur du testar .NET appar finns i Testing i .NET.
I Visual Studio kan du skapa ett nytt projekt för något av dessa testverktyg genom att högerklicka på din lösning i Prieskumník riešení, välja Lägg till -> Nytt projekt från snabbmenyn och välja C# från Alla språk väljare/Windows från väljaren Alla språk väljare/Test från Alla projekttyper väljare, och välj sedan lämpligt testverktyg från listan (MSTest Test Project, NUnit Test Project eller xUnit Test Project).
När du skapar ett nytt MSTest-, NUnit- eller xUnit-projekt som refererar till ett WinUI 3-projekt måste du:
Uppdatera
TargetFrameworki .csproj-filen i testprojektet. Det här värdet måste matchaTargetFrameworki WinUI 3-projektet. Som standard är MSTest-, NUnit- och xUnit-projekt inriktade på alla plattformar som stöds av .NET, men ett WinUI 3-projekt stöder bara Windows och har ett mer specifikt TargetFramework.Om du till exempel riktar in dig på .NET 8 uppdaterar du TargetFramework för enhetstestprojektet från
<TargetFramework>net8.0</TargetFramework>till<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>.Uppdatera RuntimeIdentifiers i testprojektet.
<RuntimeIdentifiers Condition="$([MSBuild]::GetTargetFrameworkVersion('$(TargetFramework)')) >= 8">win-x86;win-x64;win-arm64</RuntimeIdentifiers><RuntimeIdentifiers Condition="$([MSBuild]::GetTargetFrameworkVersion('$(TargetFramework)')) < 8">win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>Lägg till följande egenskap i filen
PropertyGroupi .csproj i testprojektet för att säkerställa att testet läser in Windows App SDK-körningen:<WindowsAppSdkBootstrapInitialize>true</WindowsAppSdkBootstrapInitialize>Kontrollera att Windows App SDK-körningen är installerad på den dator som kör testet. Mer information om distribueringsprocessen för Windows App SDK finns i Windows App SDK distribueringsguide för ramverksberoende appar som paketeras med extern plats (eller packas upp).
UI-testautomatisering
För testning från slutpunkt till slutpunkt av appens användargränssnitt kan du använda automatiserade verktyg för användargränssnittstestning som interagerar med din app på samma sätt som en användare gör – klicka på knappar, ange text och verifiera visuellt tillstånd.
Appium med WinAppDriver
WinAppDriver var det ursprungliga Microsoft verktyget för Windows UI-automatiseringstestning, men det är inte längre under aktiv utveckling. Den rekommenderade efterträdaren är Appium med plugin-programmet Windows Application Driver (appium-windows-driver). Appium använder samma WebDriver-protokoll och stöder Windows skrivbordsappar via Windows UI Automation ramverket.
Så här konfigurerar du Appium för en WinUI 3-skrivbordsapp:
Anmärkning
De här stegen kräver Node.js (LTS rekommenderas).
- Installera Appium:
npm install -g appium - Installera drivrutinen för Windows:
appium driver install windows - Kontrollera att drivrutinen är installerad:
appium driver list(bör visaswindowssom installerad) - Starta Appium-servern:
appium - Skriva tester med hjälp av ett WebDriver-klientbibliotek (tillgängligt för C#, Python, Java och JavaScript).
Tips/Råd
Ange kapaciteten app till appens Application User Model ID (AUMID) för paketerade appar, eller den körbara sökvägen för opaketerade appar.
Insikter om tillgänglighet och automatisering av användargränssnitt
Accessibility Insights for Windows hjälper dig att inspektera och validera UI Automation-trädet i din app. De element som exponeras via UI Automation är samma element som automatiserade testverktyg interagerar med. Att se till att din app har ett välstrukturerat automatiseringsträd förbättrar både tillgängligheten och testbarheten.
Microsoft Playwright (webbgränssnitt i WebView2)
Om din app använder WebView2 för webbinnehåll kan du använda Microsoft Playwright för att testa webbdelarna. Playwright stöder automatiserad webbläsartestning och kan ansluta till WebView2-instanser för validering av scenarion från slutpunkt till slutpunkt.
Kodkvalitet och statisk analys
Statiska analysverktyg fångar buggar, säkerhetsproblem och kodkvalitetsproblem före körning. Integrera dessa i ditt utvecklingsarbetsflöde och DINA CI-pipelines för konsekvent kvalitet.
.NET analysverktyg (Roslyn)
.NET projekt innehåller inbyggda Roslyn-analysverktyg som söker efter korrekthet, prestanda, tillförlitlighet och säkerhetsproblem. Så här aktiverar du alla rekommenderade regler i projektet:
<PropertyGroup>
<AnalysisLevel>latest-recommended</AnalysisLevel>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>
Du kan konfigurera regelallvarlighetsgrader i en .editorconfig-fil eller genom att använda <NoWarn> i projektfilen. Mer information finns i Översikt över .NET-källkodsanalys.
C++ statisk analys (/analysera)
För C++ Windows App SDK- och Win32-projekt aktiverar du Microsoft statisk analys genom att ange /analyze i projektegenskaperna eller MSBuild:
<PropertyGroup>
<EnableMicrosoftCodeAnalysis>true</EnableMicrosoftCodeAnalysis>
<CodeAnalysisRuleSet>CppCoreCheckRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
C++ Core Guidelines Checker tillämpar moderna metodtips för C++. För Win32 API-användningsmönster, SAL-anteckningar och /analyze flaggan fångar vanliga problem med livslängd, buffert och samtidighet.
CI-integration
Lägg till statisk analys i ditt CI-arbetsflöde så att kodkvalitetskontroller körs på varje pull-begäran. I ett GitHub Actions arbetsflöde:
- name: Build with analysis
run: dotnet build --configuration Release /p:AnalysisLevel=latest-recommended /p:TreatWarningsAsErrors=true
För C++-projekt som använder MSBuild:
- name: Build with /analyze
run: msbuild MySolution.sln /p:Configuration=Release /p:EnableMicrosoftCodeAnalysis=true /p:RunCodeAnalysis=true
Telemetri- och kraschrapportering
Genom att samla in telemetri och kraschdata från produktion kan du förstå hur din app presterar i verkligheten, identifiera regressioner och prioritera korrigeringar.
Application Insights
Azure Application Insights tillhandahåller kraschrapportering, prestandaövervakning och användningsanalys för skrivbordsappar. Så här lägger du till den i ett Windows App SDK projekt:
Anmärkning
Du behöver en Azure-prenumeration och en Application Insights-resurs. Se Skapa en Application Insights-resurs för att hämta din anslutningssträng.
- Installera NuGet-paketet:
Microsoft.ApplicationInsights - Initiera TelemetryClient när appen startar med din anslutningssträng
- Spåra undantag, händelser och sidvisningar
Detaljerade installationsinstruktioner finns i Application Insights för .NET-konsolen och skrivbordsappar.
OpenTelemetry
OpenTelemetry är en leverantörsneutral standard för insamling av loggar, mått och distribuerade spårningar. .NET OpenTelemetry SDK integreras med Azure Monitor och andra serverdelar.
Installera de paket som krävs:
dotnet add package OpenTelemetry
dotnet add package Azure.Monitor.OpenTelemetry.Exporter
Konfigurera sedan spårningsprovidern:
var activitySource = new System.Diagnostics.ActivitySource("MyApp");
// OpenTelemetry SDKs can listen to ActivitySource instances like this one.
using var activity = activitySource.StartActivity("Startup");
activity?.SetTag("app.version", "1.0.0");
OpenTelemetry är den rekommenderade metoden för nya projekt som behöver stöd för flera serverdelar eller distribuerad spårning. Application Insights är fortfarande ett bra val om du använder Azure Monitor exklusivt och vill ha nyckelfärdiga instrumentpaneler.
Windows felrapportering (WER)
För intern kraschinsamling samlar Windows Felrapportering automatiskt in kraschdumpar när appen avslutas oväntat. Paketerade appar (MSIX) får kraschdata som visas via partnercenters kvalitetsrapporter. För organisationsappar (LOB) kan du konfigurera lokal WER-dumpsamling för att spara minidumpar för lokal analys.
Ytterligare resurser
Windows developer