Compartilhar via


Guia de migração do MSTest v3

Este guia ajuda os usuários a atualizar seus projetos do MSTest do MSTest v1 para o MSTest v3. O MSTest v3 apresenta novos recursos significativos, otimizações e algumas alterações significativas para melhorar a confiabilidade do teste, a velocidade de execução e a compatibilidade com estruturas .NET modernas.

Quem é afetado?

Este guia destina-se a projetos atualmente .NET Framework que usam o MSTest v1 por meio de:

  • Referências de montagem: projetos que fazem Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll referência diretamente.
  • Pacotes NuGet: projetos que usam MSTest.TestFramework o pacote NuGet com a versão 1.0.0-1.4.0.

Se o seu projeto depender do MSTest para testes de unidade e incluir as referências acima, ele se beneficiará das melhorias no MSTest v3 e exigirá ajustes descritos neste guia.

Por que migrar para o MSTest v3?

Mesmo que você esteja satisfeito com sua configuração atual do MSTest, a atualização para o MSTest v3 desbloqueia vantagens substanciais que melhoram a qualidade e a preparação para o futuro de seus testes. Veja por que fazer a mudança agora pode ser um passo valioso à frente:

  • Segurança aprimorada: o MSTest v1 tem vulnerabilidades de segurança conhecidas. Com o MSTest v3, implementamos amplas melhorias de segurança para proteger seu ambiente de teste.

  • Aumentos imediatos de desempenho: o MSTest v3 reduz significativamente o tempo de execução do teste e otimiza o uso de recursos. Isso é particularmente benéfico em pipelines de CI/CD, onde testes mais rápidos podem encurtar os ciclos de implantação e reduzir os custos de infraestrutura.

  • Preparando seus testes para o futuro: o MSTest v3 oferece suporte robusto para versões modernas do .NET, incluindo o .NET 8 e iterações futuras, juntamente com compatibilidade entre plataformas. Isso significa que seus testes serão mais adaptáveis e prontos para atualizações, evitando a dívida técnica de estruturas de teste desatualizadas.

  • Maior confiabilidade de código com novos analisadores: os analisadores de código internos do MSTest v3 impõem as práticas recomendadas, ajudando a detectar problemas antecipadamente e promovendo um código de teste mais limpo e de fácil manutenção:

    • Detecção proativa de problemas: os analisadores fornecem feedback em tempo real, sugerindo melhorias e sinalizando possíveis problemas à medida que você escreve seus testes.

    • Asserções fortemente tipadas mais fortes: substituindo sobrecargas ambíguas, o MSTest v3 impõe asserções fortemente tipadas, reduzindo o risco de comportamento de teste incorreto e tornando os testes mais confiáveis.

    • Código mais limpo, menos manutenção: ao alinhar seus testes com os padrões e práticas recomendadas do MSTest, o MSTest v3 ajuda você a manter uma base de código mais limpa e gerenciável, reduzindo a dívida técnica ao longo do tempo.

  • Maior flexibilidade e extensibilidade: o MSTest v3 oferece suporte a cenários de teste avançados, incluindo fontes de dados dinâmicas e execução paralela em assembly. Essa flexibilidade permite abordagens de teste mais sofisticadas e acelera os conjuntos de testes sem configurações complexas.

Ao atualizar, você está configurando seus testes para serem mais rápidos, confiáveis e adaptáveis a futuros desenvolvimentos do .NET, posicionando seu projeto para o sucesso a longo prazo e uma manutenção mais fácil.

Etapas da migração

1. Remova a referência de montagem

Para projetos que usam o MSTest v1 por meio de referências de assembly, há uma referência à seguinte DLL:

  • Microsoft.VisualStudio.QualityTools.UnitTestFramework

Em projetos de estilo não SDK, essas referências geralmente são adicionadas por meio do Visual Studio em vez de editar diretamente o XML. Para remover essas referências usando a GUI do Visual Studio:

  1. Abra o Gerenciador de Soluções no Visual Studio.

  2. Expanda o nó do projeto usando o MSTest.

  3. Localize a pasta Referências dentro do projeto.

  4. Dentro da pasta Referências , localize e selecione as referências de DLL do MSTest, Microsoft.VisualStudio.QualityTools.UnitTestFramework

  5. Clique com o botão direito do mouse na(s) referência(s) selecionada(s) e escolha Remover no menu de contexto.

    imagem

  6. Salve o projeto para aplicar as alterações.

2. Atualize seu projeto

Você pode atualizar seu projeto para o MSTest v3 de duas maneiras:

  • Atualizar pacotes: se você tiver referências de pacote NuGet para o MSTest.TestFramework e o MSTest.TestAdapter, atualize-os usando o Gerenciador de Pacotes NuGet no Visual Studio ou executando o seguinte comando no Console do Gerenciador de Pacotes NuGet:

    Update-Package MSTest.TestFramework -Version 3.6.2
    Update-Package MSTest.TestAdapter -Version 3.6.2
    
  • Ou instale o pacote MSTest: instale o pacote MSTest mais recente usando o Gerenciador de Pacotes NuGet no Visual Studio ou executando o seguinte comando no Console do Gerenciador de Pacotes NuGet:

    Install-Package MSTest -Version 3.6.2
    
  • Ou atualize o arquivo de projeto diretamente (para projetos no estilo SDK): atualize seu .csproj arquivo para especificar a versão do SDK do MSTest.

    <Project Sdk="MSTest.Sdk/3.6.2">
      <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
      </PropertyGroup>
    </Project>
    

Escolha a opção que melhor se adapta à configuração do seu projeto. Ambos os métodos garantem que seu projeto seja atualizado para usar o MSTest v3.

3. Atualize seu código

  • Assert.AreEqual/AreNotEqual ou Assert.AreSame/AreNotSame (com objeto) Se uma dessas asserções causar erros, recomendamos verificar se os tipos que estão sendo comparados são compatíveis. Se estiverem, considere adicionar digitação genérica explícita para resolver o problema.

  • Usando genéricos:

    Assert.AreEqual<customObject>(expectedObject, actualObject);
    Assert.AreNotEqual<customObject>(expectedObject, actualObject);
    
  • Inicialização de teste: use TestInitialize métodos para inicialização assíncrona.

  • Limpeza: use TestCleanup métodos ou o Dispose padrão para limpeza.

  • RunSettings: o arquivo não é mais suportado, o .testsettings que significa que <LegacySettings> também não está mais disponível. Use .runsettings para configuração de teste.

Novos recursos no MSTest v3

  • Padrões aprimorados para projetos de teste
  • Configuração e uso simplificados
  • Extensibilidade aprimorada do executor MSTest
  • Novos analisadores de código baseados em Roslyn para desenvolvimento de teste aprimorado
  • Suporte para aplicativos WinUI
  • Execução paralela em assembly
  • Fontes de dados dinâmicas para testes orientados por dados

Recursos preteridos

  • Suporte descartado para:
    • .NET Framework 4.5 (use o .NET 4.6.2 ou superior)
    • .NET Standard 1.0 (use o .NET Standard 2.0)
    • Versões UWP anteriores a 16299
    • Versões do WinUI anteriores a 18362
    • .NET 5 (usar .NET Core 3.1 ou .NET 6)

Alterações interruptivas e APIs removidas

Sobrecargas de asserção

Se as asserções AreEqual, AreNotEqual, AreSame ou AreNotSame causarem erros, recomendamos verificar se os tipos que estão sendo comparados são compatíveis. Se estiverem, considere adicionar digitação genérica explícita para resolver o problema.

Atualizações de DataRowAttribute

Os construtores DataRowAttribute no MSTest v3 foram simplificados para impor a correspondência de tipo para parâmetros. Isso significa que você deve especificar valores em DataRow que correspondam precisamente aos tipos dos parâmetros do método.

Exemplo:

[TestMethod]
[DataRow(1, "test")] // Correct: matches parameter types (int, string)
public void MyTestMethod(int number, string text) { ... }

Nos casos em que os tipos não correspondem exatamente, o MSTest v3 agora gerará um erro em vez de tentar uma conversão.

Configurações de tempo limite

No MSTest v3, o tratamento de configurações foi padronizado Timeout para garantir um comportamento consistente em diferentes ambientes .NET. Essa alteração pode afetar os testes que dependem de valores de tempo limite específicos, especialmente se esses testes forem assíncronos ou executados em estruturas diferentes.

  • No MSTest v1 ou v2, determinadas configurações de tempo limite podem ter sido interpretadas de forma diferente dependendo da estrutura (por exemplo, .NET Framework vs. .NET Core).
  • O MSTest v3 impõe um comportamento de tempo limite consistente, o que pode significar que os testes configurados com tempos limite em versões anteriores podem falhar ou se comportar de maneira diferente se os valores de tempo limite forem muito curtos no novo padrão.

O que isto significa:

  • Testes com tempos limite podem precisar de ajuste: se os testes tiverem um Timeout atributo com durações específicas, verifique se esses valores ainda permitem que o teste seja concluído no MSTest v3. Os testes que foram aprovados anteriormente com um determinado tempo limite podem precisar de um valor de tempo limite maior ou menor para funcionar corretamente de acordo com as novas regras.

  • Tratamento unificado de tempo limite: o tratamento unificado de tempo limite do MSTest v3 torna os tempos limite mais previsíveis, mas requer a verificação e a possível atualização de Timeout valores em testes mais antigos.

Exemplo:

// Old (v1/v2) - Timeout was sometimes interpreted inconsistently
[TestMethod]
[Timeout(2000)] // Timeout in milliseconds
public void TestMethod() { ... }

// New (v3) - Unified handling of timeout
[TestMethod]
[Timeout(2000)] // Verify this value still works under MSTest v3
public async Task TestMethod() { ... } 

Alterações de configuração

Verifique se .runsettings os arquivos estão alinhados com a sintaxe e a estrutura do MSTest v3.

Execução paralela e otimização de desempenho

Configure a execução paralela em .runsettings para melhorar o desempenho.

Exemplo:

<RunSettings>
  <RunConfiguration>
    <MaxCpuCount>-1</MaxCpuCount> <!-- Uses all available processors -->
  </RunConfiguration>
</RunSettings>

Uso aprimorado de recursos

O MSTest v3 otimiza o gerenciamento de recursos, resultando em menor uso de memória e melhor eficiência da CPU.

Manipulando atributos obsoletos e migrando extensões personalizadas

Examine os atributos preteridos e substitua-os por alternativas do MSTest v3 sempre que possível.

Analisadores de código e práticas recomendadas

O MSTest v3 inclui analisadores de código internos para práticas recomendadas, evitando armadilhas de configuração e uso adequado de atributos e configurações do MSTest. Isso está disponível automaticamente ao usar o pacote MSTest ou MSTest.Sdk, ou você pode instalar o pacote MSTest Analyzer.

Recursos adicionais