Panoramica dello strumento di esecuzione MSTest
Lo strumento di esecuzione MSTest è un'alternativa leggera e portabile a VSTest per l'esecuzione di test in tutti i contesti (ad esempio, pipeline di integrazione continua, interfaccia della riga di comando, Editor elenco dei test di Visual Studio, Editor elenco dei test di VS Code). Lo strumento di esecuzione MSTest è incorporato direttamente nei progetti di test MSTest e non sono necessarie altre dipendenze dell'app, come ad esempio vstest.console
o dotnet test
per eseguire i test.
Lo strumento di esecuzione MsTest è open source e si basa su una libreria Microsoft.Testing.Platform
. È possibile trovare il codice Microsoft.Testing.Platform
nel repository microsoft/testfx di GitHub. Lo strumento di esecuzione MSTest viene fornito in bundle con MSTest in 3.2.0-preview.23623.1
o versione successiva.
Abilitare lo strumento di esecuzione MSTest in un progetto MSTest
È consigliabile utilizzare MSTest SDK perché semplifica notevolmente la configurazione e l'aggiornamento del progetto e garantisce l'allineamento corretto delle versioni della piattaforma (strumento di esecuzione MSTest) e delle relative estensioni.
Quando si usa MSTest SDK
, per impostazione predefinita si acconsente esplicitamente all'utilizzo dello strumento di esecuzione di MSTest.
<Project Sdk="MSTest.Sdk/3.3.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
In alternativa, è possibile abilitare lo strumento di esecuzione MSTest aggiungendo la proprietà EnableMSTestRunner
e impostando OutputType
su Exe
nel file di progetto. È anche necessario assicurarsi di usare MSTest 3.2.0-preview.23623.1
o versione successiva.
Si consideri il file di progetto di esempio seguente:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- Enable the MSTest runner, this is an opt-in feature -->
<EnableMSTestRunner>true</EnableMSTestRunner>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<!--
MSTest meta package is the recommended way to reference MSTest.
It's equivalent to referencing:
Microsoft.NET.Test.Sdk
MSTest.TestAdapter
MSTest.TestFramework
MSTest.Analyzers
-->
<PackageReference Include="MSTest" Version="3.2.0" />
<!--
Coverlet collector isn't compatible with MSTest runner, you can
either switch to Microsoft CodeCoverage (as shown below),
or switch to be using coverlet global tool
https://github.com/coverlet-coverage/coverlet#net-global-tool-guide-suffers-from-possible-known-issue
-->
<PackageReference Include="Microsoft.Testing.Extensions.CodeCoverage"
Version="17.10.1" />
</ItemGroup>
</Project>
Consiglio
È consigliabile impostare la proprietà EnableMSTestRunner
in file Directory.Build.props anziché file csproj per assicurarsi che tutti i progetti di test nella soluzione usino lo strumento di esecuzione MSTest.
Configurazioni e filtri
.runsettings
Lo strumento di esecuzione MSTest supporta runsettings tramite l'opzione della riga di comando --settings
. Per l'elenco completo delle voci MSTest supportate, vedere Configurare MSTest: Runsettings. I comandi seguenti mostrano vari esempi di utilizzo.
Utilizzo di dotnet run
:
dotnet run --project Contoso.MyTests -- --settings config.runsettings
Utilizzo di dotnet exec
:
dotnet exec Contoso.MyTests.dll --settings config.runsettings
oppure
dotnet Contoso.MyTests.dll --settings config.runsettings
Uso del file eseguibile:
Contoso.MyTests.exe --settings config.runsettings
Filtro dei test
È possibile fornire il filtro di test con semplicità usando l'opzione della riga di comando --filter
. I comandi seguenti mostrano alcuni esempi.
Utilizzo di dotnet run
:
dotnet run --project Contoso.MyTests -- --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"
Utilizzo di dotnet exec
:
dotnet exec Contoso.MyTests.dll --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"
oppure
dotnet Contoso.MyTests.dll --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"
Uso del file eseguibile:
Contoso.MyTests.exe --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"