Freigeben über


Testen von WinUI-Apps, die mit dem Windows App SDK erstellt wurden

In diesem Thema geben wir einige Empfehlungen zum Testen und Überprüfen der Funktionalität in Apps, die mit den Windows App SDK-Features mithilfe der WinUI 3-Benutzeroberfläche (UI) erstellt wurden. Das Testen ist ein wesentlicher Bestandteil des App-Entwicklungsprozesses– Es hilft Ihnen, Fehler frühzeitig abzufangen, die Codequalität aufrechtzuerhalten und eine zuverlässige Benutzererfahrung zu gewährleisten, während sich Ihre App weiterentwickelt. Durch die Integration von Unittests in Ihren Workflow können Sie Code problemlos refaktorisieren, neue Features hinzufügen und Updates veröffentlichen, in dem Wissen, dass vorhandene Funktionen weiterhin wie erwartet funktionieren.

Lernprogramm: Erstellen eines WinUI 3-Komponententestprojekts.

Die meisten Objekttypen unter den Microsoft.UI.Xaml-Namespaces müssen aus einem UI-Thread in einem XAML-Anwendungsprozess verwendet werden. (Ausführliche Informationen zum Testen von Apps, die mit Windows App SDK erstellt wurden, die WinUI 3 nicht verwenden, finden Sie im folgenden Abschnitt, Testing nicht-WinUI-Funktionalität.)

Hinweis

Es wird ein Refactoring des zu testenden Codes empfohlen, indem Sie den Code aus dem Haupt-App-Projekt entnehmen und in ein Bibliotheksprojekt einfügen. Sowohl das App-Projekt als auch das Komponententestprojekt können dann auf dieses Bibliotheksprojekt verweisen. In diesem Abschnitt wird beschrieben, wie Komponententests für WinUI 3-Apps in Visual Studio mithilfe der integrierten Komponententestprojektvorlagen erstellt werden.

Hinweis

Die hier beschriebene Komponententest-App wird im Kontext einer WinUI 3-Anwendung geschrieben. Dies ist für alle Tests erforderlich, die Code ausführen, der die XAML-Laufzeit erfordert. Dieses Projekt erstellt einen XAML-UI-Thread und führt die Tests aus.

In diesem Tutorial erfahren Sie, wie:

  • Erstellen Sie eine WinUI Unit Test App Projekt in Visual Studio.
  • Verwenden Sie den Visual Studio Test Explorer.
  • Fügen Sie ein WinUI-Klassenbibliotheksprojekt zum Testen hinzu.
  • Führen Sie Tests mit dem Visual Studio Test-Explorer aus.

Voraussetzungen

Sie müssen Visual Studio installiert und für die WinUI-Entwicklung eingerichtet haben. Siehe Schnellstart: Einrichten Ihrer Umgebung und Erstellen eines WinUI 3-Projekts.

Erstellen eines WinUI Unit Test App-Projekts

Erstellen Sie zunächst ein Komponententestprojekt. Der Projekttyp enthält alle Vorlagendateien, die Sie benötigen.

  1. Öffnen Sie Visual Studio, und wählen Sie Ein neues Projekt erstellen im Startfenster aus.

    Screenshot des Visual Studio Startfensters.

  2. Filtern Sie im Fenster Neues Projekt erstellen Projekte nach C#> Windows und WinUI wählen Sie die Vorlage WinUI Unit Test App aus, und wählen Sie dann Next

    Screenshot des Visual Studio Fensters

  3. [Optional] Ändern Sie im Fenster Neues Projekt konfigurierenProjektname, Projektmappenname (entfernen Sie die Markierung bei Projektmappe und Projekt im selben Verzeichnis platzieren) und den Standort Ihres Projekts.

  4. Wählen Sie "Erstellen" aus.

Ausführen von Tests mit Test-Explorer

Wenn Sie das Testprojekt erstellen, werden ihre Tests im Test-Explorer angezeigt, der zum Ausführen Ihrer Komponententests verwendet wird. Sie können Tests auch in Kategorien gruppieren, die Testliste filtern, Wiedergabelisten von Tests erstellen, speichern und ausführen, Komponententests debuggen und (in Visual Studio Enterprise) Codeabdeckung analysieren.

Die Datei UnitTests.cs enthält den Quellcode für die vom Test-Explorer verwendeten Komponententests. Standardmäßig werden die hier gezeigten grundlegenden Beispieltests automatisch erstellt:

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. Wenn Sie es noch nicht getan haben, erstellen Sie Ihre Lösung. Dadurch kann Visual Studio alle verfügbaren Tests "entdecken".

  2. Öffnen Sie den Test-Explorer. Öffnen Sie das Menü Test, wenn es noch nicht angezeigt wird, und wählen Sie dann Test-Explorer aus (oder drücken Sie die Tasten STRG+E, T).

    Screenshot des Menüs

  3. Sehen Sie sich die Tests an. Erweitern Sie im Test-Explorer-Fenster alle Knoten (zu diesem Zeitpunkt sind nur die Beispieltests vorhanden).

    Screenshot des Fensters

  4. Führen Sie Tests durch.

    • Klicken Sie mit der rechten Maustaste auf einzelne Testknoten, und wählen Sie Ausführen aus.
    • Wählen Sie einen Test aus, und drücken Sie entweder die Schaltfläche Wiedergeben, oder drücken Sie die Tasten STRG+R, T.
    • Drücken Sie die Schaltfläche Alle Tests in der Ansicht ausführen, oder drücken Sie die Tasten STRG+R, V.

    Screenshot des Fensters

  5. Überprüfen Sie die Ergebnisse. Nach Abschluss der Tests werden die Ergebnisse im Test-Explorer-Fenster angezeigt.

    Screenshot des Fensters

Hinzufügen eines Klassenbibliotheksprojekts zum Testen

  1. Fügen Sie der Komponententest-Projektmappe ein neues Projekt hinzu. Klicken Sie im Solution Explorer mit der rechten Maustaste auf die Projektmappe, und wählen Sie Hinzufügen -> Neues Projekt....

    Screenshot des Kontextmenüs

  2. Fügen Sie in diesem Beispiel ein WinUI 3-Klassenbibliotheksprojekt hinzu. Filtern Sie im Fenster "Neues Projekt" nach C#/Windows/WinUI, und wählen Sie WinUI-Klassenbibliothek aus.

    Screenshot des Fensters

  3. Wählen Sie "Weiter" aus, und geben Sie einen Namen für das Projekt ein (in diesem Beispiel verwenden WinUIClassLibrary1wir), und drücken Sie "Erstellen".

    Screenshot des neuen Projekts

  4. Fügen Sie dem Projekt ein neues UserControl hinzu. Klicken Sie im Solution Explorer mit der rechten Maustaste auf das WinUI 3-Klassenbibliotheksprojekt, das Sie soeben hinzugefügt haben, und wählen Sie im Kontextmenü Add -> Neues Element aus.

    Screenshot des Kontextmenüs

  5. Wählen Sie im Fenster " Neues Element hinzufügen " den WinUI-Knoten in der Liste " Installierte Elemente" und dann " Benutzersteuerelement " aus den Ergebnissen aus. Benennen Sie das Steuerelement UserControl1.

    Screenshot des Fensters

  6. Öffnen Sie die Code-Behind-Datei UserControl1.xaml.cs. In diesem Beispiel fügen wir eine neue öffentliche Methode GetSeven hinzu, die einfach eine ganze Zahl zurückgibt.

    namespace WinUICLassLibrary1
    {
      public sealed partial class UserControll : UserControl
      {
         public UserControl1()
         {
             this.InitializeComponent();
         }
    
         public int GetSeven()
         {
             return 7;
         }
      }
    }
    
  7. Legen Sie das WinUI 3-Klassenbibliotheksprojekt als Abhängigkeit des Komponententestprojekts fest, um die Verwendung von Typen aus dem WinUI 3-Klassenbibliotheksprojekt zu ermöglichen. Klicken Sie in Solution Explorer unter dem Klassenbibliotheksprojekt mit der rechten Maustaste auf Dependencies und wählen Sie Add Project Reference aus.

    Screenshot des Kontextmenüs

    Wählen Sie das WinUIClassLibrary1 Element aus der Projektliste aus.

    Screenshot des Dialogfelds

  8. Erstellen Sie in UnitTests.cs eine neue Testmethode. Da in diesem Testfall ein XAML-UI-Thread ausgeführt werden muss, markieren Sie ihn mit dem [UITestMethod] Attribut anstelle des Standardattributes [TestMethod] .

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

    Diese neue Testmethode wird nun im Test-Explorer als einer Ihrer Komponententests angezeigt.

    Screenshot des Fensters

  9. Führen Sie Tests durch.

  • Klicken Sie mit der rechten Maustaste auf den neuen Testknoten, und wählen Sie Ausführen aus.
  • Wählen Sie den neuen Test aus, und drücken Sie entweder die Schaltfläche Wiedergeben, oder drücken Sie die Tasten STRG+R, T.
  • Drücken Sie die Schaltfläche Alle Tests in der Ansicht ausführen, oder drücken Sie die Tasten STRG+R, V.

Screenshot des Fensters

Testen der Nicht-WinUI-Funktionalität

In vielen Fällen umfasst eine App Funktionalität, die nicht von Microsoft.UI.Xaml-Typen abhängt, aber dennoch getestet werden muss. Es stehen verschiedene Tools zum Testen .NET Codes zur Verfügung, einschließlich MSTest, NUnit und xUnit. Weitere Informationen zum Testen .NET Apps finden Sie unter Testing in .NET.

In Visual Studio können Sie ein neues Projekt für jedes dieser Testtools erstellen, indem Sie mit der rechten Maustaste auf Ihre Lösung in Solution Explorer klicken, wählen Sie Hinzufügen - Neues Projekt aus dem Kontextmenü aus, wählen Sie C# aus dem Alle Sprachen Selektor/Windows aus dem Alle Sprachen Selektor/Test aus dem Alle Projekttypen Auswahlsystem, und wählen Sie dann das entsprechende Testtool aus der Liste aus (MSTest Test Project, NUnit Test Project oder xUnit Test Project).

Beim Erstellen eines neuen MSTest-, NUnit- oder xUnit-Projekts, das auf ein WinUI 3-Projekt verweist, müssen Sie:

  1. Aktualisieren Sie die TargetFramework in der .csproj-Datei Ihres Testprojekts. Dieser Wert muss mit dem Wert im TargetFramework WinUI 3-Projekt übereinstimmen. Standardmäßig sind MSTest-, NUnit- und xUnit-Projekte auf die gesamte Palette von Plattformen ausgerichtet, die von .NET unterstützt werden, aber ein WinUI 3-Projekt unterstützt nur Windows und verfügt über ein spezifisches TargetFramework.

    Wenn Sie beispielsweise auf .NET 8 abzielen, aktualisieren Sie das TargetFramework des Unit-Test-Projekts von <TargetFramework>net8.0</TargetFramework> auf <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>.

  2. Die RuntimeIdentifiers in Ihrem Testprojekt aktualisieren.

    <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. Fügen Sie die folgende Eigenschaft zur PropertyGroup in der CSPROJ-Datei Ihres Testprojekts hinzu, um sicherzustellen, dass der Test die Windows App SDK Laufzeit lädt: <WindowsAppSdkBootstrapInitialize>true</WindowsAppSdkBootstrapInitialize>

  4. Stellen Sie sicher, dass die Windows App SDK Laufzeit auf dem Computer installiert ist, auf dem der Test ausgeführt wird. Weitere Informationen zur Windows App SDK Bereitstellung finden Sie im Windows App SDK Bereitstellungshandbuch für frameworkabhängige Apps, die mit externem Speicherort (oder entpackt) verpackt sind.

Weitere Ressourcen