Olá, desenvolvedores .NET! Prontos para elevar o nível dos seus testes com a Microsoft Testing Platform (MTP) e o .NET 10? Se você tem usado o dotnet test com o tradicional VSTest runner, prepare-se — a MTP chegou para tornar seus testes mais suaves, rápidos e flexíveis. Neste guia conversacional, exploraremos o que é a MTP, também conhecida como MicrosoftTestingPlatform, por que ela é um avanço em relação ao VSTest e como aproveitá-la com o dotnet test no .NET 10 para construir testes robustos para seus projetos. Vou guiá-lo pelos passos que segui para experimentar essa configuração, desde um projeto MSTest básico até uma solução multiprojeto com um executável autônomo. Vamos mergulhar no mundo da MTP, MicrosoftTestingPlatform, .NET 10, dotnet test e tornar os testes mais fáceis e divertidos!
Quer uma plataforma integrada e completa para sua Equipe de Desenvolvedores trabalhar em conjunto com produtividade máxima?
Apidog atende a todas as suas demandas e substitui o Postman por um preço muito mais acessível!
Por Que os Testes São Importantes no Desenvolvimento .NET
Antes de colocarmos a mão na massa, vamos falar sobre a importância dos testes. Seja você construindo um aplicativo pequeno ou um sistema empresarial massivo, os testes garantem que seu código funcione como esperado, detectam bugs precocemente e o salvam daquelas sessões de depuração noturnas. Testes unitários automatizados, como os que criaremos com MSTest e MTP, permitem verificar a funcionalidade, melhorar a qualidade do código e tornar o refactoring uma tarefa simples. Com os aprimoramentos de desempenho do .NET 10 e a estrutura de teste moderna da MTP, você está pronto para escrever testes rápidos, confiáveis e fáceis de integrar em pipelines de CI/CD. Pronto para ver como? Vamos seguir minha jornada!
O Que É a Microsoft Testing Platform (MTP)?
A Microsoft Testing Platform (MTP), ou MicrosoftTestingPlatform, é a estrutura de teste de próxima geração da Microsoft, introduzida para substituir o antigo VSTest runner. Ao contrário do VSTest, que depende de adaptadores complexos e execução baseada em DLL, a MTP oferece uma experiência nativa e simplificada para executar testes no .NET. Ela é integrada ao .NET 10, tornando-a mais rápida e flexível, com recursos como executores de teste autônomos e melhor integração com dotnet test. A MTP suporta MSTest, NUnit e xUnit, e é projetada para fluxos de trabalho modernos, incluindo CI/CD e desenvolvimento multiplataforma. Você pode pensar nela como o irmão mais legal e eficiente do VSTest, otimizado para os aprimoramentos de desempenho do .NET 10.
Passo 1: Configurando um Projeto MSTest Básico com MTP
Vamos começar de forma simples, criando um projeto MSTest básico para ver a MTP em ação. Veja como eu comecei:
Criar o Projeto:
- Abra seu terminal e crie um novo projeto MSTest usando o .NET CLI:
dotnet new mstest -n MyMtpTests
- Isso cria uma pasta de projeto
MyMtpTestscom um arquivo de teste padrão (UnitTest1.cs) e um arquivo.csproj.
Verificar o Arquivo de Projeto:
- O
MyMtpTests.csprojgerado se parece com isto:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="MSTest.TestAdapter" Version="3.1.1" />
<PackageReference Include="MSTest.TestFramework" Version="3.1.1" />
</ItemGroup>
</Project>
- Isso configura um projeto MSTest padrão com VSTest, usando Coverlet para cobertura de código e Microsoft.NET.Test.Sdk para execução de testes.
Executar os Testes:
- Navegue até a pasta do projeto:
cd MyMtpTests
- Execute o teste padrão:
dotnet test
- O VSTest runner executa o teste de exemplo em
UnitTest1.cs, e você verá a saída confirmando que o teste foi aprovado, juntamente com estatísticas de cobertura do Coverlet.

O Que Está Acontecendo? Esta é uma configuração tradicional usando VSTest, mas é uma base sólida antes de atualizarmos para a MTP. O projeto executa testes como uma DLL, o que é aceitável, mas não tão flexível quanto a abordagem de executável da MTP.
Passo 2: Evoluindo para um Executor de Testes Baseado em Executável MTP
Agora, vamos tornar as coisas mais emocionantes mudando para o executor de testes executável autônomo da MTP, que permite executar testes sem o dotnet test. Veja como eu fiz:
Atualizar o Arquivo de Projeto:
- Modifique
MyMtpTests.csprojpara habilitar a MTP e criar um executável:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
<!-- Enable MTP runner and executable output -->
<EnableMSTestRunner>true</EnableMSTestRunner>
<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
<OutputType>Exe</OutputType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="MSTest.TestFramework" Version="3.10.2" />
<PackageReference Include="MSTest.TestAdapter" Version="3.10.2" />
</ItemGroup>
<ItemGroup>
<Using Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
</ItemGroup>
</Project>
Principais mudanças:
<EnableMSTestRunner>true</EnableMSTestRunner>: Ativa o executor de testes da MTP.<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>: Garante compatibilidade comdotnet test.<OutputType>Exe</OutputType>: Gera um executável autônomo em vez de uma DLL.
Compilar o Projeto:
- Execute:
dotnet build
- Isso gera um executável (por exemplo,
MyMtpTests.exe) na pastabin/Debug/net8.0.

Executar o Executável:
- Navegue até o diretório de saída:
cd bin/Debug/net8.0
- Execute o executável:
- Windows:
MyMtpTests.exe - macOS/Linux:
./MyMtpTests - Os testes são executados como um aplicativo de console autônomo, sem a necessidade de
dotnet test!

Por Que Isso É Incrível: A abordagem executável é perfeita para configurações personalizadas de CI/CD ou ambientes sem o .NET SDK instalado. É um divisor de águas em termos de flexibilidade, e a MTP a torna mais rápida que o VSTest ao reduzir a sobrecarga.
Passo 3: Indo Além com .NET 10 e Testes Multiprojeto
Para ver a MTP e o .NET 10 brilharem em um cenário do mundo real, vamos construir uma solução multiprojeto com uma biblioteca de classes e testes. Veja como eu configurei:
Estrutura final do projeto:
MyMtpSolution/
│
├── MyLibrary/
│ ├── Calculator.cs
│ └── MyLibrary.csproj
│
├── MyLibrary.Tests/
│ ├── CalculatorTests.cs
│ └── MyLibrary.Tests.csproj
│
├── MyMtpSolution.sln
└── dotnet.config
1. Criar uma Solução:
- Comece do zero com uma solução:
dotnet new sln -n MyMtpSolution
2. Criar uma Biblioteca de Classes:
- Adicione um projeto de biblioteca de classes:
dotnet new classlib -n MyLibrary
- Implemente uma classe
CalculatoremMyLibrary/Calculator.cs:
namespace MyLibrary
{
public class Calculator
{
public int Add(int a, int b) => a + b;
public int Subtract(int a, int b) => a - b;
public int Multiply(int a, int b) => a * b;
public int Divide(int a, int b) =>
b == 0 ? throw new ArgumentException("Cannot divide by zero.") : a / b;
}
}
3. Criar um Projeto de Teste:
- Crie um projeto MSTest:
dotnet new mstest -n MyLibrary.Tests
- Adicione testes em
MyLibrary.Tests/UnitTest1.cs:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MyLibrary;
namespace MyLibrary.Tests
{
[TestClass]
public class CalculatorTests
{
private Calculator _calculator;
[TestInitialize]
public void Setup()
{
_calculator = new Calculator();
}
[TestMethod]
public void Add_ReturnsCorrectSum()
{
Assert.AreEqual(5, _calculator.Add(2, 3));
}
[TestMethod]
public void Subtract_ReturnsCorrectDifference()
{
Assert.AreEqual(1, _calculator.Subtract(3, 2));
}
[TestMethod]
public void Multiply_ReturnsCorrectProduct()
{
Assert.AreEqual(6, _calculator.Multiply(2, 3));
}
[TestMethod]
public void Divide_ReturnsCorrectQuotient()
{
Assert.AreEqual(2, _calculator.Divide(6, 3));
}
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void Divide_ByZero_ThrowsException()
{
_calculator.Divide(6, 0);
}
}
}
4. Adicionar Referências de Projeto:
- Vincule o projeto de teste à biblioteca:
dotnet add MyLibrary.Tests reference MyLibrary
5. Adicionar Projetos à Solução:
- Inclua ambos os projetos na solução:
dotnet sln MyMtpSolution.sln add MyLibrary/MyLibrary.csproj
dotnet sln MyMtpSolution.sln add MyLibrary.Tests/MyLibrary.Tests.csproj
6. Configurar para MTP:
- Atualize
MyLibrary.Tests.csprojpara habilitar a MTP:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
<EnableMSTestRunner>true</EnableMSTestRunner>
<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="MSTest.TestFramework" Version="3.10.2" />
<PackageReference Include="MSTest.TestAdapter" Version="3.10.2" />
</ItemGroup>
<ItemGroup>
<Using Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
</ItemGroup>
</Project>
- Opcionalmente, atualize
MyLibrary.csprojpara consistência (embora não seja estritamente necessário):
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
7. Atualizar para .NET 10:
- Baixe o .NET 10 SDK em dotnet.microsoft.com (certifique-se de que seja compatível com seu SO — Windows, macOS ou Linux).

- Atualize ambos os arquivos
.csprojpara ter como alvo o .NET 10:
<TargetFramework>net10.0</TargetFramework>
8. Criar um Arquivo dotnet.config:
- Na raiz da solução, crie
dotnet.configcom:
[dotnet.test.runner]
name = "Microsoft.Testing.Platform"
- Isso habilita a integração nativa da MTP com
dotnet testno .NET 10.
9. Compilar e Executar Testes:
- Na raiz da solução:
dotnet test
- A MTP executa os testes, aproveitando as otimizações do .NET 10. Você verá a saída para todos os testes, incluindo aprovação/falha e estatísticas de cobertura.

Por Que Isso É Incrível: O .NET 10 traz melhorias de desempenho (JIT mais rápido, melhor gerenciamento de memória), e a integração nativa da MTP elimina as pontes legadas do VSTest, tornando os testes mais rápidos e confiáveis. A configuração multiprojeto imita aplicativos do mundo real, com uma biblioteca e um projeto de teste separado.
Como .NET 10 e MTP Melhoram os Testes
A MTP e o .NET 10 levam os testes para o próximo nível:
- Velocidade: O executor nativo da MTP é otimizado para o .NET 10, reduzindo o tempo de inicialização em comparação com o VSTest.
- Flexibilidade: Executáveis autônomos tornam os testes portáteis, ideais para CI/CD personalizado ou ambientes conteinerizados.
- Escalabilidade: O suporte multiprojeto lida com soluções complexas, com a MTP garantindo execução de testes consistente.
- Recursos Modernos: A compilação AOT e as otimizações de memória do .NET 10 fazem os testes rodarem mais rápido, enquanto a MTP suporta recursos avançados como execução de testes paralelos e relatores personalizados.
Os usuários estão entusiasmados com a MTP: “É como o VSTest, mas sem a bagagem — mais rápido e limpo!” Com o .NET 10, você obtém desempenho de ponta, e a MTP torna o dotnet test uma alegria.
Dicas de Solução de Problemas
- Testes Não Estão Rodando? Certifique-se de que o .NET 10 SDK esteja instalado e que
TargetFrameworkesteja definido comonet10.0. - MTP Não Habilitada? Verifique se
EnableMSTestRunnereTestingPlatformDotnetTestSupportestão no.csprojoudotnet.config. - Cobertura Ausente? Verifique se
coverlet.collectorestá incluído e executedotnet test --collect:"XPlat Code Coverage". - Executável Falha? Certifique-se de que
OutputTypesejaExee executedotnet buildantes de executar o.exe.
Conclusão
Agora você é um profissional no uso da MTP (MicrosoftTestingPlatform), .NET 10, dotnet test para construir uma configuração de testes moderna! De um projeto MSTest básico a uma solução multiprojeto com um executável autônomo, você viu como a MTP supera o VSTest e como o .NET 10 impulsiona o desempenho. Tente adicionar mais testes, integrar em seu pipeline de CI/CD ou explorar os recursos avançados da MTP, como execução paralela. Tem configurações de teste legais? Compartilhe-as — vamos manter as boas vibrações de testes!
