Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе мы даем рекомендации по тестированию и проверке функциональности в приложениях, созданных с использованием интерфейсных возможностей 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
Чтобы начать, создайте проект модульного теста. Для этого типа проекта уже имеются все нужные файлы шаблонов.
Откройте Visual Studio и выберите Create новый проект в окне "Пуск".
В окне Create новый проект отфильтруйте проекты по C#, Windows и WinUI выберите шаблон WinUI Unit Test App и выберите Next
[Необязательно] В окне "Настройка нового проекта" измените имя проекта, имя решения (снимите флажок "Разместить решение" и "Проект" в том же каталоге) и расположение проекта.
Нажмите кнопку "Создать".
Выполнение тестов с помощью обозревателя тестов
При создании тестового проекта тесты отображаются в обозревателе тестов, который используется для выполнения модульных тестов. Вы также можете группировать тесты в категории, фильтровать список тестов, создавать, сохранять и запускать списки воспроизведения тестов, отладочные модульные тесты и (в 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);
}
}
}
Если вы этого еще не сделали, создайте решение. Это позволит Visual Studio "обнаружить" все доступные тесты.
Откройте обозреватель тестов. Если он не отображается, откройте меню "Тест " и выберите обозреватель тестов (или нажмите клавиши CTRL+ E, T).
Просмотр тестов. В окне обозревателя тестов разверните все узлы (на этом этапе будут присутствовать только примеры тестов).
Выполните тесты.
- Щелкните правой кнопкой мыши отдельные тестовые узлы и выберите "Выполнить".
- Выберите тест и нажмите кнопку воспроизведения или нажмите клавиши CTRL+R, T.
- Нажмите кнопку "Выполнить все тесты в представлении" или нажмите клавиши CTRL+R, V.
Просмотр результатов. После завершения тестов результаты отображаются в окне обозревателя тестов.
Добавление проекта библиотеки классов для тестирования
Добавьте новый проект в решение модульного теста. В Обозреватель решений щелкните решение правой кнопкой мыши и выберите Add -> Новый проект... .
Скриншот контекстного меню решения с выделенным вариантом "Добавить/Новый проект" в Visual Studio. В этом примере добавьте проект библиотеки классов WinUI 3. В окне "Новый проект" отфильтруйте библиотеку классов C#/Windows/WinUI и выберите библиотеку классов WinUI.
Нажмите кнопку "Далее " и введите имя проекта (в этом примере мы используем
WinUIClassLibrary1) и нажмите клавишу CREATE.Снимок экрана нового проекта «Библиотека классов WinUI», выделенного в Обозреватель решений, а файл Class1.cs открыт в редакторе кода.
Добавьте новое
UserControlв проект. В Обозреватель решений щелкните правой кнопкой мыши проект библиотеки классов WinUI 3, который вы только что добавили и выберите Add -> New Item в контекстном меню.
В окне "Добавить новый элемент" выберите узел WinUI в списке установленных элементов и выберите элемент управления пользователем из результатов. Присвойте элементу управления
UserControl1имя.
Откройте файл связанного кода UserControl1.xaml.cs. В этом примере мы добавим новый публичный метод
GetSeven, который просто возвращает целое число.namespace WinUIClassLibrary1 { public sealed partial class UserControl1 : UserControl { public UserControl1() { this.InitializeComponent(); } public int GetSeven() { return 7; } } }Задайте проект библиотеки классов WinUI 3 в качестве зависимости от проекта модульного теста, чтобы включить использование типов из проекта библиотеки классов WinUI 3. В Обозреватель решений в проекте библиотеки классов щелкните правой кнопкой мыши Dependencies и выберите Add Project Reference>.
WinUIClassLibrary1Выберите элемент из списка "Проекты".
Создайте новый метод тестирования в UnitTests.cs. Так как этот тестовый случай требует запуска потока пользовательского интерфейса XAML, помечайте его атрибутом
[UITestMethod]вместо стандартного[TestMethod]атрибута.[UITestMethod] public void TestUserControl1() { WinUIClassLibrary1.UserControl1 userControl1 = new WinUIClassLibrary1.UserControl1(); Assert.AreEqual(7, userControl1.GetSeven()); }Этот новый метод тестирования теперь отображается в обозревателе тестов в качестве одного из модульных тестов.
Выполните тесты.
- Щелкните правой кнопкой мыши новый тестовый узел и выберите "Выполнить".
- Выберите новый тест и нажмите кнопку воспроизведения или нажмите клавиши CTRL+ R, T.
- Нажмите кнопку "Выполнить все тесты в представлении" или нажмите клавиши CTRL+R, V.
Тестирование функциональных возможностей, отличных от WinUI
Во многих случаях приложение включает функции, которые не зависят от типов Microsoft.UI.Xaml, но по-прежнему требуют тестирования. Различные средства доступны для тестирования кода .NET, включая MSTest, NUnit и xUnit>. Дополнительные сведения о тестировании приложений .NET см. в разделе Testing в .NET.
В Visual Studio вы можете создать проект для любого из этих средств тестирования, щелкнув правой кнопкой мыши по вашему решению в Обозреватель решений, выбрав Add -> New Project в контекстном меню, затем отметив C# в селекторе все языки/Windows в селекторе все языки/Test в селекторе все типы проектов, и затем выбрав соответствующее средство тестирования из списка (MSTest Test Project, NUnit Test Project или xUnit Test Project).
При создании нового проекта MSTest, NUnit или xUnit, ссылающегося на проект WinUI 3, необходимо:
Обновите элемент
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>.Обновите RuntimeIdentifiers в тестовом проекте.
<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>Добавьте следующее свойство в файл
PropertyGroupв CSPROJ-файле тестового проекта, чтобы убедиться, что тест загружает среду выполнения Windows App SDK:<WindowsAppSdkBootstrapInitialize>true</WindowsAppSdkBootstrapInitialize>Убедитесь, что среда выполнения Windows App SDK установлена на компьютере, на котором выполняется тест. Для получения дополнительных сведений о развертывании Windows App SDK см. руководство по развертыванию Windows App SDK для приложений, зависящих от платформы, которые упакованы с использованием внешнего расположения (или неупакованы).
Автоматизация тестов пользовательского интерфейса
Для комплексного тестирования пользовательского интерфейса приложения можно использовать средства автоматического тестирования пользовательского интерфейса, которые взаимодействуют с приложением таким образом, как пользователь будет нажать кнопки, вводить текст и проверять визуальное состояние.
Appium с WinAppDriver
WinAppDriver был исходным средством Microsoft для тестирования автоматизации пользовательского интерфейса Windows, но он больше не находится в активной разработке. Рекомендуемым преемником является Appium с плагином Windows Application Driver (appium-windows-driver). Appium использует тот же протокол WebDriver и поддерживает классические приложения Windows через платформу автоматизации пользовательского интерфейса Windows (Windows модель автоматизации пользовательского интерфейса).
Чтобы настроить Appium для настольного приложения WinUI 3:
Замечание
Для этих действий требуется Node.js (рекомендуется LTS).
- Установите Appium:
npm install -g appium - Установите драйвер Windows:
appium driver install windows - Убедитесь, что драйвер установлен:
appium driver list(должно отображатьсяwindowsкак установленное) - Запустите сервер Appium:
appium - Написание тестов с помощью клиентской библиотеки WebDriver (доступно для C#, Python, Java и JavaScript).
Подсказка
Задайте для возможности app идентификатор пользовательской модели приложения (AUMID) вашего приложения для упакованных приложений или путь к исполняемому файлу для неупакованных приложений.
Специальные возможности и автоматизация пользовательского интерфейса
Accessibility Insights for Windows помогает проверять и подтверждать дерево модель автоматизации пользовательского интерфейса вашего приложения. Элементы, предоставляемые через модель автоматизации пользовательского интерфейса, являются теми же элементами, с которыми взаимодействуют автоматизированные средства тестирования. Обеспечение того, чтобы приложение было хорошо структурированным деревом автоматизации, повышает доступность и возможность тестирования.
Microsoft Playwright (веб-интерфейс в WebView2)
Если приложение использует WebView2 для веб-содержимого, вы можете использовать Microsoft Playwright для тестирования веб-частей. Playwright поддерживает автоматическое тестирование браузера и может подключаться к экземплярам WebView2 для сквозной проверки сценария.
Качество кода и статический анализ
Инструменты статического анализа выявляют ошибки, проблемы безопасности и качества кода ещё до выполнения программы. Интегрируйте их в рабочий процесс разработки и конвейеры CI для обеспечения согласованного качества.
анализаторы .NET (Roslyn)
.NET проекты включают встроенные анализаторы Roslyn, которые проверяют правильность, производительность, надежность и безопасность. Чтобы включить все рекомендуемые правила в проекте, выполните следующие действия.
<PropertyGroup>
<AnalysisLevel>latest-recommended</AnalysisLevel>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>
Вы можете настроить серьезность правил в .editorconfig файле или с помощью <NoWarn> файла проекта. Дополнительные сведения см. в разделе "Обзор анализа исходного кода .NET".
Статический анализ C++ (/analysis)
Для проектов C++ с Windows App SDK и Win32 включите статический анализ Microsoft, задав /analyze в свойствах проекта или в MSBuild:
<PropertyGroup>
<EnableMicrosoftCodeAnalysis>true</EnableMicrosoftCodeAnalysis>
<CodeAnalysisRuleSet>CppCoreCheckRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
Средство проверки основных рекомендаций C++ применяет современные рекомендации C++. Для типичных сценариев использования Win32 API аннотации SAL и флаг /analyze помогают выявлять распространённые проблемы, связанные со временем жизни объектов, буферами и многопоточностью.
Интеграция CI
Добавьте статический анализ в конвейер CI, чтобы проверки качества кода запускались при каждом pull request. В рабочем процессе GitHub Actions:
- name: Build with analysis
run: dotnet build --configuration Release /p:AnalysisLevel=latest-recommended /p:TreatWarningsAsErrors=true
Для проектов C++ с помощью MSBuild:
- name: Build with /analyze
run: msbuild MySolution.sln /p:Configuration=Release /p:EnableMicrosoftCodeAnalysis=true /p:RunCodeAnalysis=true
Телеметрия и отчеты о сбоях
Сбор данных телеметрии и аварийного сбоя из рабочей среды помогает понять, как ваше приложение работает в реальном мире, определять регрессии и определять приоритеты исправлений.
Application Insights
приложение Azure Insights предоставляет отчеты о сбоях, мониторинг производительности и аналитику использования классических приложений. Чтобы добавить его в проект Windows App SDK:
Замечание
Вам нужна Azure подписка и ресурс Application Insights. Чтобы получить строку подключения, см. Создание ресурса Application Insights.
- Установите пакет NuGet:
Microsoft.ApplicationInsights - Инициализируйте TelemetryClient при запуске приложения с помощью строки подключения
- Отслеживайте исключения, события и просмотры страниц
Подробные инструкции по настройке см. в разделе Application Insights для консольных и настольных приложений .NET.
OpenTelemetry
OpenTelemetry — это стандарт, не зависящий от поставщика, для сбора журналов, метрик и распределенных трасс. Пакет SDK .NET OpenTelemetry интегрируется с Azure Monitor и другими серверными службами.
Установите необходимые пакеты:
dotnet add package OpenTelemetry
dotnet add package Azure.Monitor.OpenTelemetry.Exporter
Затем настройте поставщик трассировки:
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 — это рекомендуемый подход для новых проектов, которым требуется поддержка нескольких серверных служб или распределенная трассировка. Application Insights остается хорошим выбором, если вы используете Azure Monitor исключительно и хотите готовых панелей мониторинга.
Отчеты об ошибках Windows (WER)
Для сбора данных о нативных сбоях служба отчетов об ошибках Windows автоматически собирает дампы сбоев при неожиданном завершении работы приложения. Для упакованных приложений (MSIX) данные о сбоях доступны в отчетах о качестве Центра партнеров. Для корпоративных приложений (LOB) можно настроить сбор локальных дампов WER, чтобы сохранять мини-дампы для локального анализа.
Дополнительные ресурсы
Windows developer