Testování aplikací WinUI vytvořených pomocí Windows App SDK

V tomto tématu uvádíme několik doporučení, jak testovat a ověřovat funkce v aplikacích vytvořených pomocí funkcí uživatelského rozhraní (UI) Windows App SDK pomocí funkcí WinUI 3. Testování je základní součástí procesu vývoje aplikací – pomáhá zachytit chyby v rané fázi, udržovat kvalitu kódu a zajistit spolehlivé uživatelské prostředí při vývoji vaší aplikace. Začleněním testů jednotek do pracovního postupu můžete s jistotou refaktorovat kód, přidat nové funkce a dodávat aktualizace s vědomím, že stávající funkce budou fungovat podle očekávání.

Kurz: Vytvoření projektu testování jednotek WinUI 3

Většina typů objektů v oboru názvů Microsoft.UI.Xaml musí být použita z vlákna uživatelského rozhraní v procesu aplikace XAML. (Podrobnosti o testování aplikací vytvořených pomocí Windows App SDK, které nepoužívají WinUI 3, najdete v následující části Testování funkcí jiných než WinUI.)

Poznámka:

Doporučujeme refaktorovat jakýkoli kód, který se má otestovat tak, že ho přetáhnete z hlavního projektu aplikace a umístíte ho do projektu knihovny. Projekt aplikace i projekt jednotkových testů pak mohou odkazovat na tento projekt knihovny. Tato část popisuje, jak vytvořit testy jednotek pro aplikace WinUI 3 v Visual Studio pomocí předdefinovaných šablon projektů testů jednotek.

Poznámka:

Aplikace pro testování jednotek popsaná zde je napsaná v kontextu aplikace WinUI 3. To je vyžadováno pro všechny testy, které provádějí kód vyžadující modul runtime XAML. Tento projekt vytvoří vlákno uživatelského rozhraní XAML a spustí testy.

V tomto návodu se naučíte, jak:

  • Vytvořte projekt WinUI Unit Test App v Visual Studio.
  • Použijte průzkumníka Visual Studio Test Explorer.
  • Přidejte projekt knihovny tříd WinUI pro účely testování.
  • Spusťte testy pomocí průzkumníka testů Visual Studio.

Předpoklady

Pro vývoj pro WinUI musíte mít nainstalované Visual Studio a nainstalovat ho. Viz Rychlý start: Nastavení prostředí a vytvoření projektu WinUI 3.

Vytvoření projektu aplikace Pro testování jednotek WinUI

Začněte vytvořením projektu testování jednotek. Typ projektu obsahuje všechny soubory šablony, které potřebujete.

  1. Otevřete Visual Studio a v okně Start vyberte Vytvořit nový projekt.

    Screenshot úvodního okna Visual Studio.

  2. V okně Vytvoření nového projektu vyfiltrujte projekty podle kritérií C#, Windows a WinUI, vyberte šablonu WinUI Unit Test App a poté klikněte na Další.

    Screenshot okna Visual Studio 'Vytvořit nový projekt'.

  3. [Volitelné] V okně Konfigurovat nový projekt změňtenázev projektu, název řešení (zrušte zaškrtnutí políčka Umístit řešení a projekt do stejného adresáře) a umístění projektu.

  4. Vyberte Vytvořit.

Spouštění testů pomocí Průzkumníka testů

Při vytváření testovacího projektu se testy zobrazí v Průzkumníku testů, který slouží ke spuštění testů jednotek. Testy můžete také seskupit do kategorií, filtrovat seznam testů, vytvářet, ukládat a spouštět testovací seznamy, ladit jednotkové testy a (ve Visual Studio Enterprise) analyzovat pokrytí kódu.

Soubor UnitTests.cs obsahuje zdrojový kód pro testy jednotek používané Průzkumníkem testů. Ve výchozím nastavení se základní ukázkové testy zobrazené zde vytvoří automaticky:

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);
      }
   }
}
  1. Pokud jste to ještě neudělali, sestavte řešení. To umožní Visual Studio "zjistit" všechny dostupné testy.

  2. Otevřete Průzkumníka testů. Pokud není vidět, otevřete nabídku Test a pak zvolte Průzkumníka testů (nebo stiskněte Ctrl +E, T).

    Snímek obrazovky nabídky Test ve Visual Studio.

  3. Zobrazení testů V okně Průzkumníka testů rozbalte všechny uzly (v tuto chvíli budou k dispozici pouze ukázkové testy).

    Screenshot okna Průzkumníka testů v Visual Studio zobrazující výchozí ukázkové testy.

  4. Spusťte testy.

    • Klikněte pravým tlačítkem na jednotlivé testovací uzly a vyberte Spustit.
    • Vyberte test a buď stiskněte tlačítko Přehrát , nebo stiskněte Ctrl+R, T.
    • Stiskněte tlačítko Spustit všechny testy v zobrazení nebo stiskněte Kombinaci kláves Ctrl+R, V.

    Screenshot okna Průzkumníka testů v Visual Studio zobrazující místní nabídku testu se zvýrazněnou možností Spustit příkaz.

  5. Kontrola výsledků. Po dokončení testů se výsledky zobrazí v okně Průzkumníka testů .

    Screenshot okna Průzkumníka testů v Visual Studio zobrazující výsledky spuštění testu.

Přidání projektu knihovny tříd pro testování

  1. Přidejte do řešení testování jednotek nový projekt. V Průzkumník řešení klikněte pravým tlačítkem na řešení a vyberte Přidat -> Nový projekt... .

    Screenshot místní nabídky Řešení se zvýrazněnou možností Přidat\/Nový projekt v Visual Studio.

  2. V tomto příkladu přidejte projekt knihovny tříd WinUI 3. V okně Nový projekt vyfiltrujte C#/Windows/WinUI a vyberte Knihovna třídWinUI.

    Screenshot okna Nový projekt se zvýrazněnou knihovnou tříd WinUI v Visual Studio.

  3. Vyberte Další a zadejte název projektu (v tomto příkladu používáme WinUIClassLibrary1) a stiskněte Vytvořit.

    Screenshot nového projektu 'WinUI Class Library' zvýrazněného v Průzkumník řešení a souboru Class1.cs otevřeného v editoru kódu.

  4. Přidejte do projektu nový UserControl . V Průzkumník řešení klikněte pravým tlačítkem na projekt knihovny tříd WinUI 3, který jste právě přidali, a v místní nabídce vyberte Přidat -> Nová položka.

    Snímek obrazovky místní nabídky řešení s možností Přidat\/Nová položka zvýrazněnou ve Visual Studiu.

  5. V okně Přidat novou položku vyberte uzel WinUI v seznamu Nainstalované položky a pak ve výsledcích zvolte Uživatelský ovládací prvek . Pojmenujte ovládací prvek UserControl1.

    Screenshot okna Přidání nové položky se zvýrazněnou možností WinUI\/User Control (WinUI) ve Visual Studio.

  6. Otevřete soubor UserControl1.xaml.cs kódu na pozadí. V tomto příkladu přidáme novou veřejnou metodu, GetSeven která jednoduše vrátí celé číslo.

    namespace WinUIClassLibrary1
    {
      public sealed partial class UserControl1 : UserControl
      {
         public UserControl1()
         {
             this.InitializeComponent();
         }
    
         public int GetSeven()
         {
             return 7;
         }
      }
    }
    
  7. Nastavte projekt knihovny tříd WinUI 3 jako závislost projektu testu jednotek, abyste umožnili použití typů z projektu knihovny tříd WinUI 3. V Průzkumník řešení v projektu knihovny tříd klikněte pravým tlačítkem na Dependencies a vyberte Přidat odkaz na projekt.

    Screenshot místní nabídky Závislosti se zvýrazněnou možností Přidat odkaz na projekt ve Visual Studio.

    WinUIClassLibrary1 Vyberte položku ze seznamu Projekty.

    Snímek obrazovky s dialogovým oknem Správce odkazů s vybraným projektem WinUIClassLibrary1

  8. Vytvořte novou testovací metodu v UnitTests.cs. Vzhledem k tomu, že tento testovací případ vyžaduje ke spuštění vlákno uživatelského rozhraní XAML, označte ho atributem [UITestMethod] místo standardního [TestMethod] atributu.

    [UITestMethod]
    public void TestUserControl1()
    {
       WinUIClassLibrary1.UserControl1 userControl1 = new WinUIClassLibrary1.UserControl1();
       Assert.AreEqual(7, userControl1.GetSeven());
    }
    

    Tato nová testovací metoda se teď zobrazí v Průzkumníku testů jako jeden z vašich jednotkových testů.

    Screenshot okna Průzkumníka testů ve Visual Studio zobrazující výchozí ukázkové testy s novým jednotkovým testem.

  9. Spusťte testy.

  • Klikněte pravým tlačítkem myši na nový testovací uzel a vyberte Spustit.
  • Vyberte nový test a buď stiskněte tlačítko Přehrát , nebo stiskněte Ctrl+R, T.
  • Stiskněte tlačítko Spustit všechny testy v zobrazení nebo stiskněte Kombinaci kláves Ctrl+R, V.

Screenshot okna Průzkumníka testů v aplikaci Visual Studio zobrazující dokončené testovací spuštění výchozích ukázkových testů a nový jednotkový test.

Testování funkcí jiného systému než WinUI

V mnoha případech aplikace obsahuje funkce, které nezávisí na typech Microsoft.UI.Xaml, ale stále potřebuje testování. K dispozici jsou různé nástroje pro testování kódu .NET, včetně MSTest, NUnit a xUnit. Další podrobnosti o testování aplikací .NET najdete v tématu Testing v .NET.

V aplikaci Visual Studio můžete vytvořit nový projekt pro některý z těchto testovacích nástrojů pravým kliknutím na vaše řešení v Průzkumník řešení a vybráním možnosti Přidat -> Nový projekt z místní nabídky. Poté zvolíte C# z Všechny jazyky, následně Windows z Všechny platformy, Test z Všechny typy projektů a nakonec vyberete příslušný testovací nástroj ze seznamu (MSTest Test Project, NUnit Test Project nebo xUnit Test Project).

Při vytváření nového projektu MSTest, NUnit nebo xUnit, který odkazuje na projekt WinUI 3, musíte:

  1. TargetFramework Aktualizujte soubor .csproj testovacího projektu. Tato hodnota se musí shodovat s TargetFramework v projektu WinUI 3. Ve výchozím nastavení projekty MSTest, NUnit a xUnit cílí na celou řadu platforem podporovaných .NET, ale projekt WinUI 3 podporuje pouze Windows a má konkrétnější TargetFramework.

    Pokud například cílíte na .NET 8, aktualizujte targetFramework projektu testu jednotek z <TargetFramework>net8.0</TargetFramework> na <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>.

  2. Aktualizujte moduly RuntimeIdentifiers v testovacím projektu.

    <RuntimeIdentifiers Condition="$([MSBuild]::GetTargetFrameworkVersion('$(TargetFramework)')) &gt;= 8">win-x86;win-x64;win-arm64</RuntimeIdentifiers>

    <RuntimeIdentifiers Condition="$([MSBuild]::GetTargetFrameworkVersion('$(TargetFramework)')) &lt; 8">win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>

  3. Do .csproj souboru vašeho testovacího projektu přidejte následující vlastnost do PropertyGroup, aby bylo zajištěno, že test načte runtime Windows App SDK: <WindowsAppSdkBootstrapInitialize>true</WindowsAppSdkBootstrapInitialize>

  4. Ujistěte se, že je na počítači, na kterém běží test, nainstalovaný modul runtime Windows App SDK. Další informace o nasazení Windows App SDK najdete v průvodci nasazením Windows App SDK pro aplikace závislé na rámci zabalené s externím umístěním (nebo bez balení).

Automatizace testů uživatelského rozhraní

Pro kompletní testování uživatelského rozhraní aplikace můžete použít automatizované testovací nástroje uživatelského rozhraní, které pracují s aplikací způsobem, jakým by uživatel klikal na tlačítka, zadává text a ověřuje stav vizuálu.

Appium s WinAppDriverem

WinAppDriver byl původní nástroj pro Microsoft pro testování automatizace uživatelského rozhraní Windows, ale už není v aktivním vývoji. Doporučeným následníkem je Appium s modulem plug-in Windows Application Driver (appium-windows-driver). Appium používá stejný protokol WebDriver a podporuje Windows desktopové aplikace prostřednictvím architektury Windows model UI Automation.

Nastavení Appium pro desktopovou aplikaci WinUI 3:

Poznámka:

Tyto kroky vyžadují Node.js (doporučuje se LTS).

  1. Nainstalujte Appium: npm install -g appium
  2. Nainstalujte ovladač Windows:appium driver install windows
  3. Ověřte, že je ovladač nainstalovaný: appium driver list (mělo by se zobrazit windows jako nainstalované).
  4. Spusťte server Appium: appium
  5. Psaní testů pomocí klientské knihovny WebDriver (k dispozici pro C#, Python, Java a JavaScript).

Tip

Nastavte funkci app na ID modelu uživatele vaší aplikace (AUMID) pro balíčkované aplikace nebo na cestu ke spustitelnému souboru pro nebalíčkované aplikace.

Poznatky o přístupnosti a automatizace uživatelského rozhraní

Přehledy přístupnosti pro Windows vám pomůžou zkontrolovat a ověřit strom model UI Automation vaší aplikace. Prvky vystavené prostřednictvím model UI Automation jsou stejné prvky, se kterými pracují automatizované testovací nástroje. Zajištění, že vaše aplikace má dobře strukturovaný strom automatizace, zlepšuje přístupnost i testovatelnost.

Microsoft Playwright (webové uživatelské rozhraní v WebView2)

Pokud vaše aplikace používá WebView2 pro webový obsah, můžete k otestování webových částí použít Microsoft Playwright. Playwright podporuje automatizované testování prohlížeče a může se připojit k instancím WebView2 pro kompletní ověřování scénářů.

Kvalita kódu a statická analýza

Nástroje statické analýzy zachytají chyby, problémy se zabezpečením a problémy s kvalitou kódu před modulem runtime. Integrujte je do vývojového pracovního postupu a kanálů CI pro zajištění konzistentní kvality.

analyzátory .NET (Roslyn)

.NET projekty zahrnují integrované analyzátory Roslyn, které kontrolují správnost, výkon, spolehlivost a problémy se zabezpečením. Chcete-li v projektu povolit všechna doporučená pravidla:

<PropertyGroup>
  <AnalysisLevel>latest-recommended</AnalysisLevel>
  <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>

Závažnosti pravidel můžete nakonfigurovat v .editorconfig souboru nebo pomocí <NoWarn> v souboru projektu. Další informace najdete v tématu Přehled analýzy zdrojového kódu .NET.

Statická analýza jazyka C++ (/analýza)

Pro projekty C++ Windows App SDK a Win32 povolte statickou analýzu Microsoft nastavením /analyze vlastností projektu nebo nástroje MSBuild:

<PropertyGroup>
  <EnableMicrosoftCodeAnalysis>true</EnableMicrosoftCodeAnalysis>
  <CodeAnalysisRuleSet>CppCoreCheckRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>

Nástroj C++ Core Guidelines Checker vynucuje moderní osvědčené postupy jazyka C++. Při používání rozhraní API Win32 anotace SAL a příznak /analyze zachycují běžné problémy se životností, vyrovnávací pamětí a souběžností.

Integrace s CI

Přidejte do pracovního postupu CI statickou analýzu, aby se kontroly kvality kódu spouštěly na všech žádostech o přijetí změn. V pracovním postupu GitHub Actions:

    - name: Build with analysis
      run: dotnet build --configuration Release /p:AnalysisLevel=latest-recommended /p:TreatWarningsAsErrors=true

Pro projekty C++ pomocí nástroje MSBuild:

    - name: Build with /analyze
      run: msbuild MySolution.sln /p:Configuration=Release /p:EnableMicrosoftCodeAnalysis=true /p:RunCodeAnalysis=true

Telemetrie a hlášení pádů

Shromažďování telemetrických dat a dat o chybách z produkčního prostředí vám pomůže pochopit, jak aplikace funguje v reálném světě, identifikovat regrese a určit prioritu oprav.

Application Insights

Aplikace Azure Insights poskytuje hlášení o pádech, monitorování výkonu a analýzy využití pro desktopové aplikace. Přidání do projektu Windows App SDK:

Poznámka:

Potřebujete předplatné Azure a prostředek Application Insights. Informace o získání připojovacího řetězce najdete v článku Vytvoření prostředku Application Insights.

  1. Nainstalujte balíček NuGet: Microsoft.ApplicationInsights
  2. Inicializujte TelemetryClient při spuštění aplikace pomocí připojovacího řetězce
  3. Sledování výjimek, událostí a zobrazení stránek

Podrobné pokyny k nastavení najdete v tématu Application Insights pro konzolu .NET a desktopové aplikace.

OpenTelemetry

OpenTelemetry je standard nezávislý na dodavateli pro shromažďování logů, metrik a distribuovaných tras. Sada .NET OpenTelemetry SDK se integruje s Azure Monitor a dalšími back-endy.

Nainstalujte požadované balíčky:

dotnet add package OpenTelemetry
dotnet add package Azure.Monitor.OpenTelemetry.Exporter

Pak nakonfigurujte zprostředkovatele traceru:

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 je doporučované řešení pro nové projekty, které potřebují podporu více backendů nebo distribuované sledování. Application Insights zůstává dobrou volbou, pokud používáte výhradně Azure Monitor a chcete řídicí panely na klíč.

Hlášení chyb systému Windows (WER)

V případě nativní kolekce chyb Windows Zasílání zpráv o chybách automaticky zaznamená výpisy stavu systému, když se aplikace neočekávaně ukončí. Zabalené aplikace (MSIX) získávají data o chybách, která se zobrazí prostřednictvím sestav kvality v Partnerském centru. U organizačních aplikací (LOB) můžete nakonfigurovat místní shromažďování výpisů paměti WER tak, aby se minidumps uložily pro místní analýzu.

Dodatečné zdroje