Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Neste tópico, fornecemos algumas recomendações sobre como testar e validar a funcionalidade em aplicativos criados com os recursos SDK do Aplicativo Windows usando WinUI 3 recursos de interface do usuário (interface do usuário). O teste é uma parte essencial do processo de desenvolvimento de aplicativos, ele ajuda você a capturar bugs antecipadamente, manter a qualidade do código e garantir uma experiência confiável do usuário à medida que seu aplicativo evolui. Ao incorporar testes de unidade em seu fluxo de trabalho, você pode refatorar o código com confiança, adicionar novos recursos e enviar atualizações sabendo que a funcionalidade existente continua funcionando conforme o esperado.
Tutorial: Criar um projeto de teste de unidade do WinUI 3.
A maioria dos tipos de objeto nos namespaces Microsoft.UI.Xaml deve ser usada de um thread de interface do usuário em um processo de aplicativo XAML. (Para obter detalhes sobre como testar aplicativos criados com SDK do Aplicativo Windows que não usam o WinUI 3, consulte a seção a seguir, Testing non-WinUI functionality.)
Observação
Recomendamos que você refatore qualquer código a ser testado retirando-o do projeto de aplicativo principal e colocando-o em um projeto de biblioteca. O projeto de aplicativo e o projeto de teste de unidade podem fazer referência a esse projeto de biblioteca. Esta seção descreve como criar testes de unidade para aplicativos WinUI 3 em Visual Studio usando os modelos internos de projeto de teste de unidade.
Observação
O aplicativo de teste de unidade descrito aqui é escrito no contexto de um aplicativo WinUI 3. Isso é necessário para todos os testes que executam o código que exige o runtime XAML. Esse projeto criará um Thread de Interface do Usuário XAML e executará os testes.
Neste tutorial, você aprenderá como:
- Crie um projeto WinUI Unit Test App no Visual Studio.
- Use Visual Studio Test Explorer.
- Adicione um projeto da Biblioteca de Classes do WinUI para teste.
- Execute testes com o Gerenciador de Testes do Visual Studio.
Pré-requisitos
Você deve ter Visual Studio instalado e configurado para o desenvolvimento do WinUI. Veja o início rápido: configure seu ambiente e crie um projeto WinUI 3.
Criar um projeto de aplicativo de teste de unidade do WinUI
Para começar, crie um projeto de teste de unidade. O tipo de projeto vem com todos os arquivos de modelo necessários.
Abra Visual Studio e selecione Criar um novo projeto na janela Iniciar.
Na janela Criar um novo projeto, filtre projetos para C#Windows e WinUI, selecione o modelo WinUI Unit Test App e selecione Next
[Opcional] Na janela Configurar seu novo projeto, altere o Nome do projeto, Nome da solução (desmarque Inserir solução e projeto no mesmo diretório) e Local do projeto.
Selecione Criar.
Executar testes com o Gerenciador de Testes
Quando você cria o projeto de teste, seus testes aparecem no Gerenciador de Testes, que é usado para executar os testes de unidade. Você também pode agrupar testes em categorias, filtrar a lista de testes, criar, salvar e executar playlists de testes, depurar testes de unidade e (em Visual Studio Enterprise) analisar a cobertura de código.
O arquivo UnitTests.cs contém o código-fonte para os testes de unidade usados pelo Gerenciador de Testes. Por padrão, os testes de exemplo básicos mostrados aqui são criados automaticamente:
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);
}
}
}
Se você ainda não fez isso, crie sua solução. Isso permitirá que Visual Studio "descubra" todos os testes disponíveis.
Abra o Gerenciador de Testes. Se não estiver visível, abra o menu Teste e escolha Gerenciador de Testes (ou pressione Ctrl + E, T).
Veja os testes. Na janela Gerenciador de Testes , expanda todos os nós (somente os testes de exemplo estarão presentes neste ponto).
Executar testes.
- Clique com o botão direito do mouse em nós de teste individuais e selecione Executar.
- Selecione um teste e pressione o botão Reproduzir ou pressione Ctrl + R, T.
- Pressione o botão Executar todos os testes na exibição ou pressione Ctrl + R, V.
Examinar os resultados. Após a conclusão dos testes, os resultados são mostrados na janela Gerenciador de Testes.
Adicionar um projeto da Biblioteca de Classes para teste
Adicione um novo projeto à solução de teste de unidade. No Gerenciador de Soluções, clique com o botão direito do mouse na solução e selecione Add -> Novo Projeto... .
Para este exemplo, adicione um projeto de biblioteca de classes do WinUI 3. Na janela Novo Projeto, filtre em C#/Windows/WinUI e selecione Biblioteca de ClassesWinUI.
Selecione Avançar e insira um nome para o projeto (para este exemplo que usamos
WinUIClassLibrary1) e pressione Criar.
Adicione um novo
UserControlao projeto. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto de biblioteca de classes do WinUI 3 que você acabou de adicionar e selecione Add -> Novo Item no menu de contexto.
Na janela Adicionar Novo Item , selecione o nó WinUI na lista de itens instalados e escolha Controle de Usuário nos resultados. Nomeie o controle
UserControl1.
Abra o arquivo code-behind UserControl1.xaml.cs. Para este exemplo, adicionamos um novo método público chamado
GetSevenque simplesmente retorna um inteiro.namespace WinUIClassLibrary1 { public sealed partial class UserControl1 : UserControl { public UserControl1() { this.InitializeComponent(); } public int GetSeven() { return 7; } } }Defina o projeto da Biblioteca de Classes do WinUI 3 como uma dependência do projeto de teste de unidade para habilitar o uso de tipos do projeto de biblioteca de classes do WinUI 3. Em Gerenciador de Soluções, no projeto da biblioteca de classes, clique com o botão direito do mouse em Dependencies e selecione Add Project Reference.
Selecione o item
WinUIClassLibrary1na lista de Projetos.
Crie um novo método de teste no UnitTests.cs. Como esse caso de teste requer que um Thread de Interface do Usuário XAML seja executado, marque-o com o
[UITestMethod]atributo em vez do atributo padrão[TestMethod].[UITestMethod] public void TestUserControl1() { WinUIClassLibrary1.UserControl1 userControl1 = new WinUIClassLibrary1.UserControl1(); Assert.AreEqual(7, userControl1.GetSeven()); }Esse novo método de teste agora aparece no Gerenciador de Testes como um dos seus testes de unidade.
Executar testes.
- Clique com o botão direito do mouse no nó do novo teste e selecione Executar.
- Selecione o novo teste e pressione o botão Executar ou pressione Ctrl + R, T.
- Pressione o botão Executar todos os testes na exibição ou pressione Ctrl + R, V.
Testar funcionalidade fora do WinUI
Em muitos casos, um aplicativo inclui funcionalidade que não depende dos tipos Microsoft.UI.Xaml, mas ainda precisa de testes. Várias ferramentas estão disponíveis para testar .NET código, incluindo MSTest, NUnit e xUnit. Para obter mais detalhes sobre como testar aplicativos .NET, consulte Testing no .NET.
Em Visual Studio, você pode criar um novo projeto para qualquer uma dessas ferramentas de teste clicando com o botão direito do mouse em sua solução no Gerenciador de Soluções, selecionando Adicionar -> Novo Projeto no menu de contexto, escolhendo C# no seletor de Todos os idiomas/Windows no seletor de Todos os idiomas/Teste no seletor de Todos os tipos de projeto, e, em seguida, escolhendo a ferramenta de teste apropriada na lista (projeto de teste MSTest, projeto de teste NUnit ou projeto de teste xUnit).
Ao criar um novo projeto MSTest, NUnit ou xUnit que faça referência a um projeto WinUI 3, você deve:
Atualize o
TargetFrameworkno arquivo .csproj do seu projeto de teste. Esse valor deve corresponder aoTargetFrameworkdo projeto WinUI 3. Por padrão, os projetos MSTest, NUnit e xUnit têm como destino toda a gama de plataformas compatíveis com .NET, mas um projeto WinUI 3 dá suporte apenas a Windows e tem um TargetFramework mais específico.Por exemplo, se você estiver direcionando o .NET 8, atualize o TargetFramework do projeto de teste de unidade de
<TargetFramework>net8.0</TargetFramework>para<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>.Atualize os RuntimeIdentifiers em seu projeto de teste.
<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>Adicione a seguinte propriedade ao
PropertyGroupno arquivo .csproj do projeto de teste para garantir que o teste carregue o SDK do Aplicativo Windows runtime:<WindowsAppSdkBootstrapInitialize>true</WindowsAppSdkBootstrapInitialize>Verifique se o SDK do Aplicativo Windows runtime está instalado no computador que executa o teste. Para obter mais informações sobre a implantação do SDK do Aplicativo Windows, consulte o Guia de Implantação do SDK do Aplicativo Windows para aplicativos dependentes de framework empacotados com local externo (ou não empacotados).
Automação de teste de interface do usuário
Para testes de ponta a ponta da interface do usuário do aplicativo, você pode usar ferramentas automatizadas de teste de interface do usuário que interagem com seu aplicativo da maneira que um usuário faria: clicar em botões, inserir texto e verificar o estado visual.
Appium com WinAppDriver
O WinAppDriver foi a ferramenta original da Microsoft para testes de automação de interface do usuário no Windows, mas não está mais em desenvolvimento ativo. O sucessor recomendado é Appium com o plugin Windows Application Driver (appium-windows-driver). O Appium usa o mesmo protocolo WebDriver e oferece suporte a aplicativos de desktop do Windows por meio do framework Windows Automação da Interface do Usuário.
Para configurar o Appium para um aplicativo da área de trabalho do WinUI 3:
Observação
Essas etapas exigem Node.js (LTS recomendado).
- Instalar o Appium:
npm install -g appium - Instale o driver do Windows:
appium driver install windows - Verifique se o driver está instalado:
appium driver list(deve ser exibidowindowscomo instalado) - Inicie o servidor Appium:
appium - Escreva testes usando uma biblioteca de clientes do WebDriver (disponível para C#, Python, Java e JavaScript).
Dica
Defina a app funcionalidade para a AUMID (ID do Modelo de Usuário do Aplicativo) do aplicativo para aplicativos empacotados ou o caminho executável para aplicativos não empacotados.
Insights de Acessibilidade e Automação da Interface do Usuário
O Accessibility Insights for Windows ajuda você a inspecionar e validar a árvore de Automação da Interface do Usuário do seu aplicativo. Os elementos expostos por meio de Automação da Interface do Usuário são os mesmos elementos com os quais as ferramentas de teste automatizadas interagem. Garantir que seu aplicativo tenha uma árvore de automação bem estruturada melhora a acessibilidade e a capacidade de teste.
Microsoft Dramaturgo (interface do usuário da Web no WebView2)
Se o aplicativo usa WebView2 para conteúdo web, você pode usar Microsoft Playwright para testar as partes web. O Playwright oferece suporte a testes automatizados em navegadores e pode se conectar a instâncias do WebView2 para validação de cenários de ponta a ponta.
Qualidade do código e análise estática
As ferramentas de análise estática capturam bugs, problemas de segurança e problemas de qualidade de código antes do runtime. Integre-os ao fluxo de trabalho de desenvolvimento e aos pipelines de CI para uma qualidade consistente.
analisadores de .NET (Roslyn)
Os projetos .NET incluem analisadores internos do Roslyn que detectam problemas de correção, desempenho, confiabilidade e segurança. Para habilitar todas as regras recomendadas em seu projeto:
<PropertyGroup>
<AnalysisLevel>latest-recommended</AnalysisLevel>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>
Você pode configurar as severidades das regras em um arquivo .editorconfig ou usando o <NoWarn> no arquivo do projeto. Para obter mais informações, consulte Visão geral da análise do código-fonte do .NET.
Análise estática do C++ (/analisar)
Para projetos do SDK de Aplicativo do Windows para C++ e Win32, habilite a análise estática da Microsoft definindo /analyze nas propriedades do projeto ou no MSBuild:
<PropertyGroup>
<EnableMicrosoftCodeAnalysis>true</EnableMicrosoftCodeAnalysis>
<CodeAnalysisRuleSet>CppCoreCheckRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
O Verificador de Diretrizes do C++ Core impõe as práticas recomendadas modernas do C++. Para padrões de uso da API Win32, as anotações SAL e a opção /analyze detectam problemas comuns de ciclo de vida, buffer e concorrência.
Integração de CI
Adicione análise estática ao fluxo de trabalho de CI para que as verificações de qualidade de código sejam executadas em cada solicitação de pull. Em um fluxo de trabalho GitHub Actions:
- name: Build with analysis
run: dotnet build --configuration Release /p:AnalysisLevel=latest-recommended /p:TreatWarningsAsErrors=true
Para projetos C++ usando o MSBuild:
- name: Build with /analyze
run: msbuild MySolution.sln /p:Configuration=Release /p:EnableMicrosoftCodeAnalysis=true /p:RunCodeAnalysis=true
Telemetria e relatórios de falha
Coletar dados de telemetria e falhas da produção ajuda você a entender como seu aplicativo é executado no mundo real, identificar regressões e priorizar correções.
Application Insights
Aplicativo Azure Insights fornece relatórios de falha, monitoramento de desempenho e análise de uso para aplicativos da área de trabalho. Para adicioná-lo a um projeto de SDK do Aplicativo Windows:
Observação
Você precisa de uma assinatura Azure e um recurso do Application Insights. Consulte Criar um recurso do Application Insights para obter a cadeia de conexão.
- Instale o pacote NuGet:
Microsoft.ApplicationInsights - Inicialize o TelemetryClient durante a inicialização do aplicativo com a sua cadeia de conexão
- Acompanhar exceções, eventos e exibições de página
Para obter instruções detalhadas de instalação, consulte o Application Insights para .NET console e aplicativos da área de trabalho.
OpenTelemetry
OpenTelemetry é um padrão independente de fornecedor para coletar logs, métricas e rastreamento distribuído. O .NET OpenTelemetry SDK se integra ao Azure Monitor e a outros backends.
Instale os pacotes necessários:
dotnet add package OpenTelemetry
dotnet add package Azure.Monitor.OpenTelemetry.Exporter
Em seguida, configure o provedor de rastreamento:
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 é a abordagem recomendada para novos projetos que precisam de suporte multi-back-end ou rastreamento distribuído. O Application Insights continuará sendo uma boa opção se você usar Azure Monitor exclusivamente e quiser painéis turnkey.
Relatório de Erros do Windows (WER)
Para a coleta de falhas nativa, Windows Relatório de Erros captura automaticamente despejos de memória quando seu aplicativo é encerrado inesperadamente. Os aplicativos empacotados (MSIX) têm os dados de falha exibidos nos relatórios de qualidade do Partner Center. Para aplicativos organizacionais (LOB), você pode configurar a coleta de despejos locais do WER para salvar minidespejos para análise local.
Recursos adicionais
Windows developer