A Windows App SDK készült WinUI-alkalmazások tesztelése

Ebben a témakörben néhány javaslatot nyújtunk a Windows App SDKWinUI 3 felhasználói felületi funkciókkal létrehozott alkalmazások funkcióinak tesztelésére és ellenőrzésére. A tesztelés elengedhetetlen része az alkalmazásfejlesztési folyamatnak – segít a hibák korai észlelésében, a kódminőség fenntartásában és az alkalmazás fejlődésével kapcsolatos megbízható felhasználói élmény biztosításában. Az egységtesztek munkafolyamatba való beépítésével magabiztosan újrabontást végezhet a kódon, új funkciókat vehet fel, és elküldheti a frissítéseket, tudva, hogy a meglévő funkciók továbbra is a várt módon működnek.

Oktatóanyag: WinUI 3 egység tesztelési projekt létrehozása.

A Microsoft.UI.Xaml névterekben lévő legtöbb objektumtípust egy felhasználói felületi szálból kell használni egy XAML-alkalmazásfolyamatban. (A WinUI 3-at nem használó Windows App SDK létrehozott alkalmazások teszteléséről a következő, Nem WinUI-funkciók tesztelése című szakaszban olvashat.)

Megjegyzés:

Javasoljuk, hogy a tesztelni kívánt kódot újrabontással húzza ki a fő alkalmazásprojektből, és helyezze egy kódtárprojektbe. Az alkalmazásprojekt és az egységtesztelési projekt is hivatkozhat erre a kódtárprojektre. Ez a szakasz azt ismerteti, hogyan hozhat létre egységteszteket WinUI 3-alkalmazásokhoz Visual Studio a beépített egységtesztelési projektsablonok használatával.

Megjegyzés:

Az itt ismertetett egységtesztelési alkalmazás egy WinUI 3-alkalmazás kontextusában van megírva. Ez minden olyan teszthez szükséges, amely XAML-futtatókörnyezetet igénylő kódot hajt végre. Ez a projekt létrehoz egy XAML felhasználói felületi szálat, és végrehajtja a teszteket.

Ebben az oktatóanyagban a következőket sajátíthatja el:

  • Hozzon létre egy WinUI egységtesztelő alkalmazást projektet Visual Studio.
  • Használja a Visual Studio Test Explorer.
  • Adjon hozzá egy WinUI-osztálykódtár-projektet teszteléshez.
  • Teszteket futtathat a Visual Studio Test Explorerrel.

Előfeltételek

A WinUI-fejlesztéshez szükséges a Visual Studio telepítése és beállítása. Lásd : Rövid útmutató: A környezet beállítása és WinUI 3-projekt létrehozása.

WinUI-egységtesztelési alkalmazásprojekt létrehozása

Első lépésként hozzon létre egy egységtesztelési projektet. A projekttípus tartalmazza az összes szükséges sablonfájlt.

  1. Nyissa meg a Visual Studio, és válassza a Új projekt létrehozása lehetőséget a Start ablakban.

    Képernyőkép a Visual Studio kezdőablakáról.

  2. A Új projekt létrehozása ablakban szűrje a projekteket C#, Windows és WinUI válassza ki a WinUI egységtesztelő alkalmazást sablont, majd válassza a Next

    A Visual Studio

  3. [Nem kötelező] Az új projekt konfigurálása ablakban módosítsa a projekt nevét, a megoldás nevét (törölje a jelölést a Megoldás és projekt elhelyezése ugyanabban a könyvtárban) és a projekt helyének módosítására .

  4. Válassza a Create gombot.

Tesztek futtatása a Test Explorerrel

A tesztprojekt létrehozásakor a tesztek megjelennek a Test Explorerben, amely az egységtesztek futtatására szolgál. A teszteket kategóriákba is csoportosíthatja, szűrheti a tesztlistát, létrehozhat, menthet és futtathat tesztlistákat, hibakeresési egységteszteket és (Visual Studio Nagyvállalati verzióban) elemezheti a kódlefedettségeket.

A UnitTests.cs fájl tartalmazza a Test Explorer által használt egységtesztek forráskódját. Alapértelmezés szerint az itt látható alapszintű mintatesztek automatikusan létrejönnek:

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. Ha még nem tette meg, hozza létre a megoldást. Ez lehetővé teszi, hogy Visual Studio "felderítse" az összes elérhető tesztet.

  2. Nyissa meg a Test Explorert. Ha nem látható, nyissa meg a Teszt menüt, majd válassza a Tesztkezelőt (vagy nyomja le a Ctrl + E, T billentyűkombinációt).

    A Teszt menü képernyőképe Visual Studio.

  3. Tesztek megtekintése. A Test Explorer ablakban bontsa ki az összes csomópontot (ezen a ponton csak a mintatesztek lesznek jelen).

    A Test Explorer ablakának képernyőképe a Visual Studio alapértelmezett mintatesztek.

  4. Teszteket futtathat.

    • Kattintson a jobb gombbal az egyes tesztcsomópontokra, és válassza a Futtatás lehetőséget.
    • Válasszon ki egy tesztet, és nyomja le a Lejátszás gombot, vagy nyomja le a Ctrl + R, T billentyűkombinációt.
    • Nyomja le az Összes teszt futtatása nézetben gombot, vagy nyomja le a Ctrl + R, V billentyűkombinációt.

    A Tesztböngésző ablakának képernyőképe Visual Studio a teszt helyi menüjében a Futtatás parancs kiemelésével.

  5. Tekintse át az eredményeket. A tesztek befejezése után az eredmények megjelennek a Test Explorer ablakban.

    A Test Explorer ablakának képernyőképe a Visual Studio-ban a tesztfutás eredményeit mutatja.

Osztálytár-projekt hozzáadása teszteléshez

  1. Adjon hozzá egy új projektet az egységtesztelési megoldáshoz. A Megoldáskezelő kattintson a jobb gombbal a megoldásra, és válassza a Add -> Új projekt... .

    A Megoldás helyi menüjének képernyőképe a Visual Studio-ban, ahol az

  2. Ebben a példában vegyen fel egy WinUI 3 osztálytárprojektet. Az Új projekt ablakban szűrjön a C#/Windows/WinUI fájlra, és válassza a WinUI osztálytár lehetőséget.

    Az Új Projekt ablak képernyőképe, amelyen a WinUI osztálykönyvtár ki van emelve a Visual Studio-ban.

  3. Válassza a Tovább lehetőséget, és adja meg a projekt nevét (ebben a példában használjuk WinUIClassLibrary1) és nyomja le a Létrehozás billentyűt.

    A Megoldáskezelő-ben kiemelt új 'WinUI Osztálykönyvtár' projekt képernyőképe, a Class1.cs fájl pedig meg van nyitva a kódszerkesztőben.

  4. Adjon hozzá egy újat UserControl a projekthez. A Megoldáskezelő kattintson a jobb gombbal az imént hozzáadott WinUI 3 osztálytárprojektre, és válassza a helyi menüben a Add -> Új elem lehetőséget.

    Az oldalképek a Megoldás helyi menüjéről, ahol a

  5. Az Új elem hozzáadása ablakban válassza a WinUI csomópontot a Telepített elemek listában, majd válassza a Felhasználói vezérlő lehetőséget az eredmények közül. Nevezze el a vezérlőt UserControl1.

    Az „Új elem hozzáadása” ablak képernyőképe, amelyen a WinUI\/User Control (WinUI) kiemelve van a Visual Studio-ban.

  6. Nyissa meg a UserControl1.xaml.cs kód mögötti fájlt. Ebben a példában egy új nyilvános metódust GetSeven adunk hozzá, amely egyszerűen egy egész számot ad vissza.

    namespace WinUIClassLibrary1
    {
      public sealed partial class UserControl1 : UserControl
      {
         public UserControl1()
         {
             this.InitializeComponent();
         }
    
         public int GetSeven()
         {
             return 7;
         }
      }
    }
    
  7. Állítsa be a WinUI 3 Osztálytár projektet az egységtesztelési projekt függőségeként, hogy engedélyezhesse a típusok használatát a WinUI 3 osztálytárprojektből. A Megoldáskezelő osztálytár projektjében kattintson a jobb gombbal a Dependencies elemre, és válassza a Add Project Reference lehetőséget.

    Képernyőkép a Függőségek helyi menüjéről, benne a Projekt hivatkozás hozzáadása kiemelve a Visual Studio-ban.

    Válassza ki az WinUIClassLibrary1 elemet a Projektek listából.

    Képernyőkép a Referenciakezelő párbeszédpanelről, amelyen a WinUIClassLibrary1 projekt van kiválasztva.

  8. Hozzon létre egy új tesztmetódust a UnitTests.cs. Mivel ebben a tesztesetben egy XAML felhasználói felületi szál futtatására van szükség, jelölje meg a standard [UITestMethod] attribútum helyett az [TestMethod] attribútummal.

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

    Ez az új tesztelési módszer most már az egységtesztek egyikeként jelenik meg a Test Explorerben .

    A Test Explorer ablakának képernyőképe a Visual Studio-ban, amely mutatja az alapértelmezett mintateszteket és az új egységtesztet.

  9. Teszteket futtathat.

  • Kattintson a jobb gombbal az új tesztcsomópontra, és válassza a Futtatás lehetőséget.
  • Válassza ki az új tesztet, és nyomja le a Lejátszás gombot, vagy nyomja le a Ctrl + R, T billentyűkombinációt.
  • Nyomja le az Összes teszt futtatása nézetben gombot, vagy nyomja le a Ctrl + R, V billentyűkombinációt.

A Test Explorer ablakának képernyőképe a Visual Studio-ban, amely egy befejezett tesztfuttatást mutat az alapértelmezett mintatesztek és az új egységteszt esetében.

Nem WinUI-funkciók tesztelése

Az alkalmazások sok esetben olyan funkciókat tartalmaznak, amelyek nem függnek a Microsoft.UI.Xaml típusától, de továbbra is tesztelést igényelnek. Különböző eszközök állnak rendelkezésre .NET kód teszteléséhez, beleértve a MSTest, NUnit és xUnit. A .NET-alkalmazások tesztelésével kapcsolatos további információkért lásd: Tesztelés .NET.

A Visual Studioban bármelyik tesztelési eszközhöz létrehozhat egy új projektet, ha jobb gombbal kattint a megoldásra a Megoldáskezelőben, és kiválasztja az Add -> New Project lehetőséget a helyi menüből. Válassza ki a C# programozási nyelvet az All languages legördülő listából, a Windows típust az All languages legördülő listából, és a Test lehetőséget az All project types legördülő listából, majd válassza ki a megfelelő teszteszközt a listából (MSTest Test Project, NUnit Test Project vagy xUnit Test Project).

WinUI 3-projektre hivatkozó új MSTest, NUnit vagy xUnit projekt létrehozásakor a következőt kell tennie:

  1. Frissítse a tesztprojekt .csproj fájljában található TargetFramework elemet. Ennek az értéknek meg kell egyeznie a TargetFramework WinUI 3 projektben szereplő értékkel. Alapértelmezés szerint az MSTest, az NUnit és az xUnit-projektek a .NET által támogatott platformok teljes körét célják, de a WinUI 3-projektek csak a Windows támogatják, és pontosabb TargetFramework-feladatokkal is rendelkezik.

    Ha például .NET 8-at céloz meg, frissítse az egységtesztelési projekt TargetFramework elemét <TargetFramework>net8.0</TargetFramework>-ről <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>- ra.

  2. Frissítse a RuntimeIdentifierst a tesztprojektben.

    <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. Adja hozzá a következő tulajdonságot a tesztprojekt .csproj fájljában található PropertyGroup, hogy a teszt betöltse a Windows App SDK futtatókörnyezetet: <WindowsAppSdkBootstrapInitialize>true</WindowsAppSdkBootstrapInitialize>

  4. Győződjön meg arról, hogy a Windows App SDK futtatókörnyezet telepítve van a tesztet futtató gépen. A Windows App SDK üzembe helyezésével kapcsolatos további információkért tekintse meg a Windows App SDK külső helyen (vagy csomagolatlan) csomagba csomagolt, keretrendszerfüggő alkalmazások üzembe helyezési útmutatóját.

Felhasználói felületi tesztelés automatizálása

Az alkalmazás felhasználói felületének végpontok közötti teszteléséhez olyan automatizált felhasználói felületi tesztelési eszközöket használhat, amelyek a felhasználó által használt módon kommunikálnak az alkalmazással – a gombokra kattintva, a szöveg beírásával és a vizualizáció állapotának ellenőrzésével.

Appium és WinAppDriver

A WinAppDriver volt az eredeti Microsoft eszköz a felhasználói felület automatizálásának Windows teszteléséhez, de már nincs aktív fejlesztés alatt. Az ajánlott utód az Appium, amely a Windows Application Driver beépülő modullal (appium-windows-driver) működik. Az Appium ugyanazt a WebDriver protokollt használja, és támogatja Windows asztali alkalmazásokat a Windows UI-automatizálás keretrendszeren keresztül.

Az Appium beállítása asztali WinUI 3-alkalmazásokhoz:

Megjegyzés:

Ezekhez a lépésekhez Node.js (LTS használata ajánlott).

  1. Az Appium telepítése: npm install -g appium
  2. Telepítse a Windows illesztőprogramot:appium driver install windows
  3. Ellenőrizze, hogy az illesztőprogram telepítve van-e: appium driver list (telepítve kell lennie windows )
  4. Indítsa el az Appium-kiszolgálót: appium
  5. Tesztek írása WebDriver-ügyfélkódtár használatával (C#, Python, Java és JavaScript esetén érhető el).

Jótanács

Állítsa be a app funkciót az alkalmazás alkalmazásfelhasználói modellazonosítójára (AUMID) a csomagolt alkalmazásokhoz, vagy a csomagolatlan alkalmazások végrehajtható elérési útjára.

Accessibility Insights és UI-automatizálás

A Windows Akadálymentességi elemzések segítségével megvizsgálhatja és ellenőrizheti az alkalmazás UI-automatizálás fáját. A UI-automatizálás által közzétett elemek ugyanazok az elemek, amelyekkel az automatizált teszteszközök kommunikálnak. Az alkalmazás jól felépített automatizálási fája javítja mind az akadálymentességet, mind a tesztelhetőséget.

Microsoft Playwright (webes felhasználói felület a WebView2-ben)

Ha az alkalmazás WebView2-t használ webes tartalmakhoz, a Microsoft Playwright használatával tesztelheti a webes részeket. A Playwright támogatja az automatizált böngészőtesztelést, és kapcsolódhat a WebView2-példányokhoz a teljes körű forgatókönyvek érvényesítéséhez.

Kódminőség és statikus elemzés

A statikus elemzési eszközök futásideje előtt hibákat, biztonsági problémákat és kódminőségi problémákat észlelnek. Ezeket integrálhatja a fejlesztési munkafolyamatba és a CI-folyamatokba a konzisztens minőség érdekében.

.NET elemzők (Roslyn)

A .NET-projektek beépített Roslyn-elemzőket tartalmaznak, amelyek a kódban helyességi, teljesítménybeli, megbízhatósági és biztonsági problémákat ellenőriznek. Az összes javasolt szabály engedélyezése a projektben:

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

A szabályok súlyossági szintjeit egy .editorconfig fájlban vagy a projektfájlban a <NoWarn> használatával konfigurálhatja. További információ: .NET-forráskódelemzés áttekintése.

C++ statikus elemzés (/elemzés)

C++ Windows App SDK és Win32 projektek esetén engedélyezze Microsoft statikus elemzését a projekttulajdonságok vagy az MSBuild beállításával/analyze:

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

A C++ alapvető irányelvek ellenőrzője modern C++ ajánlott eljárásokat alkalmaz. A Win32 API használati mintái esetén a SAL annotációk és a /analyze jelző segítenek felderíteni a gyakori élettartam-, puffer- és párhuzamossági problémákat.

CI-integráció

Adjon hozzá statikus elemzést a CI-munkafolyamathoz, hogy a kódminőség-ellenőrzés minden lekéréses kérelemben fusson. Egy GitHub Actions munkafolyamatban:

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

C++ projektek esetén az MSBuild használatával:

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

Telemetria és összeomlási jelentések

A telemetriai adatok és az összeomlási adatok éles környezetből történő gyűjtése segít megérteni az alkalmazás valós működését, azonosítani a regressziókat, és rangsorolni a javításokat.

Application Insights

Azure-alkalmazás Insights összeomlási jelentéskészítést, teljesítményfigyelést és használati elemzést biztosít asztali alkalmazásokhoz. Ha hozzá szeretné adni egy Windows App SDK projekthez:

Megjegyzés:

Szüksége van egy Azure előfizetésre és egy Application Insights-erőforrásra. Lásd: Application Insights-erőforrás létrehozása a kapcsolati karakterlánc beszerzéséhez.

  1. Telepítse a NuGet-csomagot: Microsoft.ApplicationInsights
  2. Inicializálja a TelemetryClientet az alkalmazás indításakor a kapcsolati sztringgel.
  3. Kivételek, események és oldalnézetek nyomon követése

Részletes beállítási utasításokért tekintse meg az Application Insightst .NET konzol- és asztali alkalmazásokhoz.

OpenTelemetry

Az OpenTelemetria egy szállítósemleges szabvány a naplók, metrikák és elosztott nyomkövetések gyűjtéséhez. A .NET OpenTelemetry SDK integrálható Azure Monitor és más háttérrendszerekkel.

Telepítse a szükséges csomagokat:

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

Ezután konfigurálja a nyomkövetési szolgáltatót:

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");

Az OpenTelemetry az ajánlott módszer olyan új projektekhez, amelyek több háttérrendszerbeli támogatást vagy elosztott nyomkövetést igényelnek. Az Application Insights akkor is jó választás, ha kizárólag Azure Monitor használ, és kulcsrakész irányítópultokat szeretne használni.

Windows hibajelentés (WER)

A natív összeomlások gyűjtése esetén a Windows hibajelentés automatikusan gyűjti az összeomlási memóriaképeket, amikor az alkalmazás váratlanul leáll. A csomagolt alkalmazásokhoz (MSIX) tartozó összeomlási adatok a Partner Center minőségi jelentéseiben érhetők el. Szervezeti (LOB-) alkalmazások esetén beállíthatja a WER helyi memóriaképgyűjtést a minidumpok helyi elemzéshez történő mentéséhez.

További erőforrások