Panoramica di MSTest SDK
MSTest.Sdk è un SDK per progetti MSBuild per la compilazione di app MSTest. È possibile compilare un'app MSTest senza questo SDK, ma MSTest SDK è:
- Personalizzato per fornire un'esperienza di prim'ordine per i test con MSTest.
- Destinazione consigliata per la maggior parte degli utenti.
- Facile da configurare per gli altri utenti.
MSTest SDK rileva ed esegue i test usando lo strumento di esecuzione MSTest.
È possibile abilitare MSTest.Sdk
in un progetto semplicemente aggiornando l'attributo Sdk
del nodo Project
del progetto:
<Project Sdk="MSTest.Sdk/3.3.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Nota
/3.3.1
viene fornito come esempio perché si tratta della prima versione dell'SDK, tuttavia può essere sostituito con una versione qualsiasi più recente.
Per semplificare la gestione delle versioni, è consigliabile impostare la versione dell'SDK a livello di soluzione utilizzando il file global.json. Ad esempio, il file di progetto sarà simile al seguente:
<Project Sdk="MSTest.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Specificare la versione MSTest.Sdk
nel file global.json nel modo seguente:
{
"msbuild-sdks": {
"MSTest.Sdk": "3.3.1"
}
}
Per altre informazioni, vedere Usare gli SDK del progetto MSBuild.
Quando si build
il progetto, tutti i componenti necessari vengono ripristinati e installati usando il flusso di lavoro NuGet standard impostato dal progetto.
Non è necessario altro per compilare ed eseguire i test ed è possibile usare gli stessi strumenti (ad esempio dotnet test
o Visual Studio) usati da un progetto MSTest "classico".
Importante
Passando a MSTest.Sdk
, si acconsente in modo esplicito all'uso dello strumento di esecuzione MSTest, incluso il test dotnet. Questo implica la modifica delle chiamate CI e all'interfaccia della riga di comando locale e influisce anche sulle voci disponibili di .runsettings. È possibile usare MSTest.Sdk
e mantenere invece le vecchie integrazioni e gli strumenti passando allo strumento di esecuzione.
Selezionare lo strumento di esecuzione
Per impostazione predefinita, MSTest SDK si basa sullo strumento di esecuzione MSTest, tuttavia è possibile passare a VSTest aggiungendo la proprietà <UseVSTest>true</UseVSTest>
.
Estendere lo strumento di esecuzione MSTest
È possibile personalizzare l'esperienza di MSTest runner
tramite un set di estensioni del pacchetto NuGet. Per semplificare e migliorare questa esperienza, MSTest SDK introduce due funzionalità:
Profilo dello strumento di esecuzione MSTest
Il profilo consente di selezionare il set predefinito di configurazioni ed estensioni che verranno applicate al progetto di test.
È possibile impostare il profilo usando la proprietà TestingExtensionsProfile
con uno dei tre profili seguenti:
Default
- Abilita le estensioni consigliate per questa versione di MSTest.SDK. Si tratta dell'impostazione predefinita quando la proprietà non è impostata in modo esplicito.None
- Non viene abilitata alcuna estensione.AllMicrosoft
- Abilita tutte le estensioni fornite da Microsoft (incluse le estensioni con una licenza restrittiva).
Di seguito è riportato un esempio completo, usando il profilo None
:
<Project Sdk="MSTest.Sdk/3.3.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TestingExtensionsProfile>None</TestingExtensionsProfile>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Abilitare o disabilitare le estensioni
Le estensioni possono essere abilitate e disabilitate dalle proprietà di MSBuild con il modello Enable[NugetPackageNameWithoutDots]
.
Ad esempio, per abilitare l'estensione di dump di arresto anomalo (pacchetto NuGet Microsoft.Testing.Extensions.CrashDump), usare la proprietà EnableMicrosoftTestingExtensionsCrashDump
seguente impostata su true
:
<Project Sdk="MSTest.Sdk/3.3.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Per un elenco di tutte le estensioni disponibili, vedere Estensioni di Microsoft.Testing.Platform.
Avviso
È importante rivedere le condizioni di licenza per ogni estensione in quanto potrebbero variare.
Le estensioni abilitate e disabilitate vengono combinate con le estensioni fornite dal profilo di estensione selezionato.
Questi criteri di proprietà possono essere utilizzati per abilitare un'estensione aggiuntiva sopra il profilo Default
implicito (come illustrato nell'esempio CrashDumpExtension precedente).
È anche possibile disabilitare un'estensione proveniente dal profilo selezionato. Ad esempio, disabilitare l'estensione MS Code Coverage
impostando <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
:
<Project Sdk="MSTest.Sdk/3.3.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Funzionalità
Oltre alla selezione dello strumento di esecuzione e delle relative estensioni, MSTest.Sdk
offre funzionalità aggiuntive per semplificare e migliorare l'esperienza di test.
Test con .NET Aspire
.NET Aspire è uno stack predisposto per il cloud per la creazione di applicazioni distribuite, pronte per la produzione e osservabili. .NET Aspire viene distribuito tramite una raccolta di pacchetti NuGet che gestiscono specifici problemi nativi del cloud. Per altre informazioni, vedere la documentazione .NET Aspire.
Nota
Questa funzionalità è disponibile in MSTest.Sdk 3.4.0
Impostando la proprietà EnableAspireTesting
su true
, è possibile importare tutte le dipendenze e le direttive using
predefinite necessarie per i test con 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>
Test con Playwright
Playwright consente di eseguire test end-to-end affidabili per le app Web moderne. Per altre informazioni, vedere la documentazione ufficiale Playwright.
Nota
Questa funzionalità è disponibile in MSTest.Sdk 3.4.0
Impostando la proprietà EnablePlaywright
su true
, è possibile importare tutte le dipendenze e le direttive using
predefinite necessarie per i test con 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>
Migrazione a MSTest SDK
Prendere in considerazione i passaggi seguenti necessari per eseguire la migrazione a MSTest SDK.
Aggiornamento del progetto
Quando si esegue la migrazione di un progetto di test MSTest esistente a MSTest SDK, iniziare sostituendo la voce Sdk="Microsoft.NET.Sdk"
all'inizio del progetto di test con Sdk="MSTest.Sdk"
- Sdk="Microsoft.NET.Sdk"
+ Sdk="MSTest.Sdk"
Aggiungere la versione al global.json
:
{
"msbuild-sdks": {
"MSTest.Sdk": "3.3.1"
}
}
È quindi possibile iniziare a semplificare il progetto.
Rimuovere le proprietà predefinite:
- <EnableMSTestRunner>true</EnableMSTestRunner>
- <OutputType>Exe</OutputType>
- <IsPackable>false</IsPackable>
- <IsTestProject>true</IsTestProject>
Rimuovere i riferimenti ai pacchetti predefiniti:
- <PackageReference Include="MSTest"
- <PackageReference Include="MSTest.TestFramework"
- <PackageReference Include="MSTest.TestAdapter"
- <PackageReference Include="MSTest.Analyzers"
- <PackageReference Include="Microsoft.NET.Test.Sdk"
Infine, in base al profilo delle estensioni in uso, è anche possibile rimuovere alcuni dei pacchetti Microsoft.Testing.Extensions.*
.
Aggiornare l'integrazione continua
Dopo aver aggiornato i progetti, se si sta utilizzando MSTest runner
(impostazione predefinita) e se ci si basa su dotnet test
per eseguire i test, è necessario aggiornare la configurazione CI. Per altre informazioni e per comprendere tutte le modifiche necessarie, vedere Integrazione di test dotnet.
Ecco un esempio di aggiornamento quando si usa l'attività DotNetCoreCLI
in 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"'