Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
MSTest, Microsoft Testing Framework, é um framework de testes totalmente suportado, open-source e multiplataforma para aplicações .NET. Permite-lhe escrever e executar testes, e oferece conjuntos de testes com integração com Visual Studio e Visual Studio Code Test Explorers, a CLI .NET e muitos pipelines de CI.
O MSTest está alojado no GitHub e funciona com todos os alvos .NET suportados.
Principais características
O MSTest oferece capacidades abrangentes de teste:
-
Testes orientados por dados: Execute testes com múltiplas entradas usando
DataRow,CombinatorialData,DynamicData, e fontes de dados externas. - Gestão do ciclo de vida do teste: Configuração e limpeza a nível de montagem, classe e teste.
- Execução paralela: Executar testes em simultâneo para reduzir o tempo de execução.
- Organização de testes: Categorizar, priorizar e filtrar testes com atributos de metadados.
- Analisadores de código: Detetam problemas comuns e aplicam as melhores práticas em tempo de compilação.
- Afirmações: Métodos abrangentes de afirmação para validar resultados.
Plataformas suportadas
O MSTest suporta uma vasta gama de plataformas .NET e frameworks de destino. A tabela seguinte resume o suporte da plataforma e considerações especiais:
| Platform | Plataformas-alvo | Suporte para threading | Atributos especiais | Observações |
|---|---|---|---|---|
| .NET | .NET 8+ | Paralelização total | Todos os atributos | Recomendado para novos projetos |
| Framework .NET | 4.6.2+ | Paralelização total | Todos os atributos | Suporte total a funcionalidades |
| UWP | UAP 10, .NET 10+ com ferramentas UWP | Tópico de UI | UITestMethod |
O MSTest 4.5 e o MTP 2.5 suportam as versões clássica e moderna do UWP através do sidecar de modelo de aplicação do MSTest.Sdk |
| WinUI 3 | .NET 8+ | Tópico de UI | UITestMethod |
O MTP suporta anfitriões empacotados, não empacotados e em AppContainer; consulte Testar aplicações UWP e WinUI 3 com o MSTest e o MTP |
| Automação da interface de utilizador do ambiente de trabalho do Windows | .NET 8+ para Windows | STA | STATestClass |
A pré-visualização do MSTest 4.5 pode lançar aplicações Win32, Windows Forms e WPF não empacotadas e expor uma janela através de Windows Automatização da Interface de Utilizador |
| AOT nativo | .NET 8+ | Paralelização total | A maioria dos atributos | Conjunto limitado de funcionalidades; ver Amostra nativa AOT |
| Navegador WebAssembly | .NET 10+ anfitrião personalizado | De rosca única | Limited | O suporte à execução do MTP começa com o MSTest 4.4 |
| WASI WebAssembly | .NET 10+ anfitrião personalizado | De rosca única | Limited | O suporte à execução do MTP começa com o MSTest 4.4 |
Considerações específicas da plataforma
Testes UWP
Os testes UWP correm no contentor da aplicação UWP e requerem o thread da interface para muitas operações:
[TestClass]
public class UwpTests
{
[UITestMethod]
public void TestUwpControl()
{
// Test runs on UI thread
var button = new Button();
Assert.IsNotNull(button);
}
}
Começando pelo MSTest 4.5 e MTP 2.5, usa o MSTest.Sdk para correr testes UWP clássicos e .NET modernos através do MTP. Um sidecar de confiança total regista e ativa o pacote, autoriza o SID exato do pacote da aplicação para comunicação MTP e copia os artefactos resultantes do armazenamento do pacote.
O UWP moderno requer .NET 10, UseUwp, e a cadeia de ferramentas de compilação do Visual Studio UWP. O UWP clássico mantém a sua estrutura de projeto existente uap10.0. Para configurações completas, consulte a amostra UWP moderna e a amostra clássica de UWP.
Testes do WinUI 3
Os testes do WinUI 3 também requerem acesso à thread da interface para testar componentes visuais:
[TestClass]
public class WinUITests
{
[UITestMethod]
public void TestWinUIControl()
{
// Test runs on UI thread
var window = new MainWindow();
Assert.IsNotNull(window);
}
}
O MTP suporta aplicações de teste WinUI 3 com confiança total, não empacotadas e configuradas com AppContainer. MSTest.Sdk inicia diretamente aplicações não empacotadas e utiliza o seu sidecar do modelo de aplicação para registar e ativar aplicações empacotadas.
O suporte a AppContainer requer MSTest 4.5 e MTP 2.5 ou posteriores. O VSTest não suporta o WinUI 3 não empacotado. Para detalhes de configuração, consulte Testar aplicações UWP e WinUI 3 com MSTest e MTP.
Automação da interface de utilizador do ambiente de trabalho do Windows
O MSTest.Windows.UIAutomation pacote integra a gestão do ciclo de vida do MSTest com Windows Automatização da Interface de Utilizador para aplicações Win32, Windows Forms e WPF não empacotadas. Para obter informações sobre a configuração, as limitações e as classes base ApplicationTest e WindowTest, consulte Testar aplicações de ambiente de trabalho do Windows com MSTest Automatização da Interface de Utilizador.
AOT nativo
A compilação nativa AOT é suportada com algumas limitações devido à redução das capacidades de reflexão. Usa geradores de código fonte sempre que possível e teste os seus cenários AOT com o exemplo NativeAotRunner.
Navegador e WASI WebAssembly
O MSTest 4.4 suporta anfitriões personalizados de browser .NET 10 ou de WebAssembly WASI. Para executar testes a partir de um conjunto MSTest referenciado, chame AddMSTest. No projeto anfitrião, defina EnableMSTestRunner para true e GenerateTestingPlatformEntryPoint para false. Mantenha as versões dos pacotes MSTest e MTP alinhadas.
Num runtime WebAssembly de thread única, o MSTest não pode interromper à força um teste que excedeu o tempo limite. Debugger wait não é suportado no browser nem no WASI, e o browser não suporta opções de lançamento do debugger.
O MTP pode transmitir dados TRX e comunicar artefactos de ficheiro de teste e de sessão através do sistema de ficheiros virtual do WebAssembly e do canal de artefactos do host. A publicação Azure DevOps só funciona quando o host fornece acesso HTTP suportado e a autenticação de pipeline necessária. Estas funcionalidades não concedem acesso irrestrito ao sistema de ficheiros do anfitrião ou à rede.
Para um alojamento completo do navegador, consulte o exemplo do BrowserPlayground.
Suporte de threading STA
Para cenários de interoperabilidade COM no Windows, o MSTest fornece STATestClass e STATestMethod atributos para executar testes num apartamento de um único encadeamento. Para obter detalhes sobre threading STA, incluindo suporte à continuação assíncrona com UseSTASynchronizationContext, consulte os atributos de threading.
Corredores de Teste
O MSTest suporta duas plataformas de execução de testes:
- Microsoft.Testing.Platform (MTP): A plataforma de teste moderna e recomendada, com desempenho e extensibilidade melhorados.
- VSTest: A plataforma de teste original e padrão para .NET.
Para novos projetos, recomendamos usar o MTP com o MSTest.Sdk.
Política de suporte MSTest
Desde a v3.0.0, o MSTest segue estritamente a versão semântica.
A equipa da MSTest suporta apenas a versão mais recente lançada e incentiva fortemente os utilizadores a atualizarem sempre para a versão mais recente para beneficiarem de melhorias e patches de segurança. Os lançamentos de pré-visualização não são suportados pela Microsoft, mas são oferecidos para testes públicos antes do lançamento final.
Histórico de versões
O MSTest sofreu uma evolução significativa ao longo das principais versões:
- MSTest v1: O framework original de testes Visual Studio
- MSTest v2: Primeira versão open-source com suporte multiplataforma
- MSTest v3: Reescrita moderna com arquitetura e funcionalidades melhoradas
- MSTest v4: Versão atual com funcionalidades melhoradas
Note
O MSTest 4.5 está em desenvolvimento em outubro de 2026. As funcionalidades marcadas como introduzidas no MSTest 4.5 requerem uma versão de pré-visualização até ao lançamento da versão 4.5.0.
Para detalhes sobre todos os lançamentos, consulte o registo de alterações do MSTest.
Se estás a fazer um upgrade a partir de uma versão mais antiga, consulta os guias de migração:
Alterações de grande impacto
A equipa do MSTest analisa cuidadosamente e minimiza alterações disruptivas. Quando são necessárias alterações em ruptura, a equipa utiliza Anúncios no GitHub e rótulos de alterações em ruptura nas questões para informar antecipadamente a comunidade, dando aos utilizadores tempo para dar feedback e manifestar preocupações antes do lançamento das alterações.