Поделиться через


Тестирование приложений WinUI, созданных с помощью Windows App SDK

В этом разделе мы даем рекомендации по тестированию и проверке функциональности в приложениях, созданных с использованием интерфейсных возможностей Windows App SDK и WinUI 3. Тестирование является важной частью процесса разработки приложений— это помогает перехватывать ошибки раньше, поддерживать качество кода и обеспечить надежный пользовательский интерфейс по мере развития приложения. Включив модульные тесты в рабочий процесс, вы можете уверенно рефакторингировать код, добавить новые функции и отправить обновления, зная, что существующие функциональные возможности продолжают работать должным образом.

Руководство. Создание проекта модульного теста WinUI 3.

Большинство типов объектов в пространствах имен Microsoft.UI.Xaml должны использоваться из потока пользовательского интерфейса в процессе приложения XAML. (Дополнительные сведения о тестировании приложений, созданных с Windows App SDK, которые не используют WinUI 3, см. в следующем разделе: Тестирование функциональности, не связанной с WinUI.)

Замечание

Рекомендуется рефакторинг любого кода для тестирования, извлекая его из основного проекта приложения и помещая его в проект библиотеки. Затем проект приложения и проект модульного теста могут ссылаться на этот проект библиотеки. В этом разделе описывается создание модульных тестов для приложений WinUI 3 в Visual Studio с помощью встроенных шаблонов проектов модульного теста.

Замечание

Приложение модульного теста, описанное здесь, написано в контексте приложения WinUI 3. Это необходимо для всех тестов, которые выполняют код, требующий среды выполнения XAML. Этот проект создаст поток пользовательского интерфейса XAML и выполнит тесты.

В этом руководстве вы узнаете, как:

  • Создайте проект модульного теста WinUI в Visual Studio.
  • Используйте Visual Studio Инспектор тестирования.
  • Добавьте проект библиотеки классов WinUI для тестирования.
  • Запустите тесты с помощью обозревателя тестов Visual Studio.

Необходимые условия

Необходимо установить и настроить Visual Studio для разработки WinUI. См. "Краткое руководство: настройка среды и создание проекта WinUI 3".

Создание проекта приложения модульного теста WinUI

Чтобы начать, создайте проект модульного теста. Для этого типа проекта уже имеются все нужные файлы шаблонов.

  1. Откройте Visual Studio и выберите Create новый проект в окне "Пуск".

    Screenshot окна запуска Visual Studio.

  2. В окне Create новый проект отфильтруйте проекты по C#, Windows и WinUI выберите шаблон WinUI Unit Test App и выберите Next

    Скриншот окна «Создание нового проекта» в Visual Studio.

  3. [Необязательно] В окне "Настройка нового проекта" измените имя проекта, имя решения (снимите флажок "Разместить решение" и "Проект" в том же каталоге) и расположение проекта.

  4. Нажмите кнопку "Создать".

Выполнение тестов с помощью обозревателя тестов

При создании тестового проекта тесты отображаются в обозревателе тестов, который используется для выполнения модульных тестов. Вы также можете группировать тесты в категории, фильтровать список тестов, создавать, сохранять и запускать списки воспроизведения тестов, отладочные модульные тесты и (в Visual Studio Enterprise) анализировать покрытие кода.

Файл UnitTests.cs содержит исходный код для модульных тестов, используемых Test Explorer. По умолчанию базовые примеры тестов, показанные здесь, создаются автоматически:

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. Если вы этого еще не сделали, создайте решение. Это позволит Visual Studio "обнаружить" все доступные тесты.

  2. Откройте обозреватель тестов. Если он не отображается, откройте меню "Тест " и выберите обозреватель тестов (или нажмите клавиши CTRL+ E, T).

    Снимок экрана меню

  3. Просмотр тестов. В окне обозревателя тестов разверните все узлы (на этом этапе будут присутствовать только примеры тестов).

    Снимок экрана окна обозревателя тестов в Visual Studio, показывающий тесты по умолчанию.

  4. Выполните тесты.

    • Щелкните правой кнопкой мыши отдельные тестовые узлы и выберите "Выполнить".
    • Выберите тест и нажмите кнопку воспроизведения или нажмите клавиши CTRL+R, T.
    • Нажмите кнопку "Выполнить все тесты в представлении" или нажмите клавиши CTRL+R, V.

    Скриншот окна обозревателя тестов в Visual Studio, показывающий контекстное меню теста с выделенной командой Запуск.

  5. Просмотр результатов. После завершения тестов результаты отображаются в окне обозревателя тестов.

    Screenshot окна обозревателя тестов в Visual Studio с результатами тестового выполнения.

Добавление проекта библиотеки классов для тестирования

  1. Добавьте новый проект в решение модульного теста. В Solution Explorer щелкните решение правой кнопкой мыши и выберите Add -> Новый проект... .

    Скриншот контекстного меню решения с выделенным вариантом "Добавить/Новый проект" в Visual Studio.

  2. В этом примере добавьте проект библиотеки классов WinUI 3. В окне "Новый проект" отфильтруйте библиотеку классов C#/Windows/WinUI и выберите библиотеку классов WinUI.

    Скриншот окна 'Новый проект', в котором выделена библиотека классов WinUI в Visual Studio.

  3. Нажмите кнопку "Далее " и введите имя проекта (в этом примере мы используем WinUIClassLibrary1) и нажмите клавишу CREATE.

    Снимок экрана нового проекта «Библиотека классов WinUI», выделенного в Solution Explorer, а файл Class1.cs открыт в редакторе кода.

  4. Добавьте новое UserControl в проект. В Solution Explorer щелкните правой кнопкой мыши проект библиотеки классов WinUI 3, который вы только что добавили и выберите Add -> New Item в контекстном меню.

    Снимок экрана контекстного меню решения с выделенным пунктом

  5. В окне "Добавить новый элемент" выберите узел WinUI в списке установленных элементов и выберите элемент управления пользователем из результатов. Присвойте элементу управления UserControl1имя.

    Скриншот окна

  6. Откройте файл связанного кода UserControl1.xaml.cs. В этом примере мы добавим новый публичный метод GetSeven, который просто возвращает целое число.

    namespace WinUICLassLibrary1
    {
      public sealed partial class UserControll : UserControl
      {
         public UserControl1()
         {
             this.InitializeComponent();
         }
    
         public int GetSeven()
         {
             return 7;
         }
      }
    }
    
  7. Задайте проект библиотеки классов WinUI 3 в качестве зависимости от проекта модульного теста, чтобы включить использование типов из проекта библиотеки классов WinUI 3. В Solution Explorer в проекте библиотеки классов щелкните правой кнопкой мыши Dependencies и выберите Add Project Reference>.

    Скриншот контекстного меню Зависимости с выделенной функцией

    WinUIClassLibrary1 Выберите элемент из списка "Проекты".

    Снимок экрана: диалоговое окно

  8. Создайте новый метод тестирования в UnitTests.cs. Так как этот тестовый случай требует запуска потока пользовательского интерфейса XAML, помечайте его атрибутом [UITestMethod] вместо стандартного [TestMethod] атрибута.

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

    Этот новый метод тестирования теперь отображается в обозревателе тестов в качестве одного из модульных тестов.

    Screenshot окна обозревателя тестов в Visual Studio с примерами тестов по умолчанию с новым модульным тестом.

  9. Выполните тесты.

  • Щелкните правой кнопкой мыши новый тестовый узел и выберите "Выполнить".
  • Выберите новый тест и нажмите кнопку воспроизведения или нажмите клавиши CTRL+ R, T.
  • Нажмите кнопку "Выполнить все тесты в представлении" или нажмите клавиши CTRL+R, V.

Снимок экрана окна Test Explorer в Visual Studio показывает результат завершенного запуска образцов тестов по умолчанию и нового модульного теста.

Тестирование функциональных возможностей, отличных от WinUI

Во многих случаях приложение включает функции, которые не зависят от типов Microsoft.UI.Xaml, но по-прежнему требуют тестирования. Различные средства доступны для тестирования кода .NET, включая MSTest, NUnit и xUnit>. Дополнительные сведения о тестировании приложений .NET см. в разделе Testing в .NET.

В Visual Studio вы можете создать проект для любого из этих средств тестирования, щелкнув правой кнопкой мыши по вашему решению в Solution Explorer, выбрав Add -> New Project в контекстном меню, затем отметив C# в селекторе все языки/Windows в селекторе все языки/Test в селекторе все типы проектов, и затем выбрав соответствующее средство тестирования из списка (MSTest Test Project, NUnit Test Project или xUnit Test Project).

При создании нового проекта MSTest, NUnit или xUnit, ссылающегося на проект WinUI 3, необходимо:

  1. Обновите элемент TargetFramework в файле .csproj вашего тестового проекта. Это значение должно соответствовать TargetFramework в проекте WinUI 3. По умолчанию проекты MSTest, NUnit и xUnit нацелены на полный спектр платформ, поддерживаемых .NET, но проект WinUI 3 поддерживает только Windows и имеет более конкретный TargetFramework.

    Например, если целевой объект .NET 8, обновите TargetFramework проекта модульного теста с <TargetFramework>net8.0</TargetFramework> до <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>.

  2. Обновите RuntimeIdentifiers в тестовом проекте.

    <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. Добавьте следующее свойство в файл PropertyGroup в CSPROJ-файле тестового проекта, чтобы убедиться, что тест загружает среду выполнения Windows App SDK: <WindowsAppSdkBootstrapInitialize>true</WindowsAppSdkBootstrapInitialize>

  4. Убедитесь, что среда выполнения Windows App SDK установлена на компьютере, на котором выполняется тест. Для получения дополнительных сведений о развертывании Windows App SDK см. руководство по развертыванию Windows App SDK для приложений, зависящих от платформы, которые упакованы с использованием внешнего расположения (или неупакованы).

Дополнительные ресурсы