Partilhar via


Visão geral do SDK do MSTest

MSTest.Sdk é um SDK de projeto MSBuild para criar aplicativos MSTest. É possível criar um aplicativo MSTest sem este SDK, no entanto, o SDK MSTest é:

  • Adaptado para fornecer uma experiência de primeira classe para testes com MSTest.
  • O alvo recomendado para a maioria dos usuários.
  • Fácil de configurar para outros usuários.

O SDK do MSTest descobre e executa seus testes usando o corredor MSTest.

Você pode habilitar MSTest.Sdk em um projeto simplesmente atualizando o SdkProject atributo do nó do seu projeto:

<Project Sdk="MSTest.Sdk/3.6.3">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
    </PropertyGroup>

    <!-- references to the code to test -->

</Project>

Nota

/3.6.3 é dado como exemplo e pode ser substituído por qualquer versão mais recente.

Para simplificar o tratamento de versões, recomendamos definir a versão do SDK no nível da solução usando o arquivo global.json . Por exemplo, seu arquivo de projeto teria a seguinte aparência:

<Project Sdk="MSTest.Sdk">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
    </PropertyGroup>

    <!-- references to the code to test -->

</Project>

Em seguida, especifique a MSTest.Sdk versão no arquivo global.json da seguinte maneira:

{
    "msbuild-sdks": {
        "MSTest.Sdk": "3.6.3"
    }
}

Para obter mais informações, consulte Usar SDKs de projeto MSBuild.

Quando você build projeta, todos os componentes necessários são restaurados e instalados usando o fluxo de trabalho padrão do NuGet definido pelo seu projeto.

Você não precisa de mais nada para criar e executar seus testes e você pode usar as mesmas ferramentas (por exemplo, dotnet test ou Visual Studio) usado por um projeto MSTest "clássico".

Importante

Ao mudar para o , você opta por usar o corredor MSTest, inclusive com o MSTest.Sdkteste dotnet. Isso requer a modificação de suas chamadas de CI e CLI local e também afeta as entradas disponíveis das .runsettings. Você pode usar MSTest.Sdk e ainda manter as integrações e ferramentas antigas trocando o corredor.

Selecione o corredor

Por padrão, o MSTest SDK depende do MSTest runner<UseVSTest>true</UseVSTest>

Estenda o corredor MSTest

Você pode personalizar MSTest runner a experiência por meio de um conjunto de extensões de pacote NuGet. Para simplificar e melhorar essa experiência, o MSTest SDK apresenta dois recursos:

Perfil do corredor MSTest

O conceito de perfis permite que você selecione o conjunto padrão de configurações e extensões que serão aplicadas ao seu projeto de teste.

Você pode definir o perfil usando a propriedade TestingExtensionsProfile com um dos três perfis a seguir:

Aqui está um exemplo completo, usando o None perfil:

<Project Sdk="MSTest.Sdk/3.6.3">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <TestingExtensionsProfile>None</TestingExtensionsProfile>
    </PropertyGroup>

    <!-- references to the code to test -->

</Project>
Extensão/Perfil Nenhum Padrão AllMicrosoft
Cobertura de Código ✔️ ✔️
Despejo de Falhas ✔️
Fakes ✔️ (MSTest.Sdk 3.7.0+)
Hang Dump ✔️
Hot Reload ✔️
Repetir ✔️
Trx ✔️ ✔️

Ativar ou desativar extensões

As extensões podem ser habilitadas e desabilitadas pelas propriedades do MSBuild com o padrão Enable[NugetPackageNameWithoutDots].

Por exemplo, para habilitar a extensão de despejo de memória (pacote NuGet Microsoft.Testing.Extensions.CrashDump), você pode usar a seguinte propriedade EnableMicrosoftTestingExtensionsCrashDump definida como true:

<Project Sdk="MSTest.Sdk/3.6.3">

<PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>

<!-- references to the code to test -->

</Project>

Para obter uma lista de todas as extensões disponíveis, consulte Extensões Microsoft.Testing.Platform.

Aviso

É importante rever os termos de licenciamento para cada extensão, pois eles podem variar.

As extensões ativadas e desativadas são combinadas com as extensões fornecidas pelo perfil de extensão selecionado.

Esse padrão de propriedade pode ser usado para habilitar uma extensão adicional sobre o perfil implícito Default (como visto no exemplo CrashDumpExtension anterior).

Você também pode desativar uma extensão proveniente do perfil selecionado. Por exemplo, desative a MS Code Coverage extensão definindo <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>:

<Project Sdk="MSTest.Sdk/3.6.3">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
    </PropertyGroup>

    <!-- references to the code to test -->

</Project>

Funcionalidades

Fora da seleção das extensões específicas do corredor e do corredor, MSTest.Sdk também fornece recursos adicionais para simplificar e melhorar sua experiência de teste.

Teste com o .NET Aspire

O .NET Aspire é uma pilha opinativa e pronta para a nuvem para criar aplicativos observáveis, prontos para produção e distribuídos. O .NET Aspire é fornecido por meio de uma coleção de pacotes NuGet que lidam com preocupações específicas nativas da nuvem. Para obter mais informações, consulte os documentos do .NET Aspire .

Nota

Este recurso está disponível no MSTest.Sdk 3.4.0

Ao definir a propriedade EnableAspireTesting como true, você pode trazer todas as dependências e diretivas padrão using necessárias para testar com Aspire e MSTest.

<Project Sdk="MSTest.Sdk/3.4.0">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <EnableAspireTesting>true</EnableAspireTesting>
    </PropertyGroup>

    <!-- references to the code to test -->

</Project>

Teste com Dramaturgo

O Playwright permite testes confiáveis de ponta a ponta para aplicativos Web modernos. Para mais informações, consulte os documentos oficiais do Dramaturgo.

Nota

Este recurso está disponível no MSTest.Sdk 3.4.0

Ao definir a propriedade EnablePlaywright como true você pode trazer todas as dependências e diretivas padrão using necessárias para testar com Playwright e MSTest.

<Project Sdk="MSTest.Sdk/3.4.0">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <EnablePlaywright>true</EnablePlaywright>
    </PropertyGroup>

    <!-- references to the code to test -->

</Project>

Migrar para o SDK do MSTest

Considere as etapas a seguir necessárias para migrar para o SDK do MSTest.

Atualize o seu projeto

Ao migrar um projeto de teste MSTest existente para o SDK do MSTest, comece substituindo a Sdk="Microsoft.NET.Sdk" entrada na parte superior do seu projeto de teste por Sdk="MSTest.Sdk"

- Sdk="Microsoft.NET.Sdk"
+ Sdk="MSTest.Sdk"

Adicione a versão ao seu global.json:

{
    "msbuild-sdks": {
        "MSTest.Sdk": "3.6.3"
    }
}

Você pode então começar a simplificar seu projeto.

Remova as propriedades padrão:

- <EnableMSTestRunner>true</EnableMSTestRunner>
- <OutputType>Exe</OutputType>
- <IsPackable>false</IsPackable>
- <IsTestProject>true</IsTestProject>

Remova as referências de pacote padrão:

- <PackageReference Include="MSTest"
- <PackageReference Include="MSTest.TestFramework"
- <PackageReference Include="MSTest.TestAdapter"
- <PackageReference Include="MSTest.Analyzers"
- <PackageReference Include="Microsoft.NET.Test.Sdk"

Finalmente, com base no perfil de extensões que você está usando, você também pode remover alguns dos Microsoft.Testing.Extensions.* pacotes.

Atualize o seu CI

Depois de atualizar seus projetos, se você estiver usando MSTest runner (padrão) e se depender dotnet test para executar seus testes, deverá atualizar sua configuração de CI. Para obter mais informações e orientar sua compreensão de todas as alterações necessárias, consulte integração de teste dotnet.

Aqui está um exemplo de atualização ao usar a DotNetCoreCLI tarefa no Azure DevOps:

\- task: DotNetCoreCLI@2
  inputs:
    command: 'test'
    projects: '**/**.sln'
-    arguments: '--configuration Release'
+    arguments: '--configuration Release -p:TestingPlatformCommandLineArguments="--report-trx --results-directory $(Agent.TempDirectory) --coverage"'

Consulte também