Condividi tramite


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.

Per impostazione predefinita, MSTest SDK individua ed esegue i test usando MSTest Runner per Microsoft.Testing.Platform. È possibile passare all'uso di VSTest specificando <UseVSTest>true</UseVSTest>

È possibile abilitare MSTest.Sdk in un progetto semplicemente aggiornando l'attributo Sdk del nodo Project del progetto:

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

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

</Project>

Nota

/3.10.2 viene fornito come esempio e può essere sostituito con qualsiasi versione 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>

</Project>

Specificare la versione MSTest.Sdk nel file global.json nel modo seguente:

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

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 standard di NuGet impostato per il 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 esplicitamente all'uso dello strumento di esecuzione MSTest (abilita Microsoft.Testing.Platform per MSTest), incluso il test dotnet. Questo implica la modifica delle chiamate CI e dell'interfaccia della riga di comando locale e influisce anche sulle voci disponibili del file .runsettings. È possibile usare MSTest.Sdk e mantenere le vecchie integrazioni e gli strumenti passando al runner. Per impostazione predefinita, MSTest.Sdk imposta EnableMSTestRunner e TestingPlatformDotnetTestSupport su true. Per altre informazioni sul test dotnet e sulle diverse modalità per l'esecuzione di Microsoft.Testing.Platform, vedere Test con dotnet test.

Biblioteche di supporto per utility di test

Se il progetto che usa MSTest.Sdk deve essere una libreria helper dell'utilità di test e non contiene per sé test eseguibili, il progetto deve avere <IsTestApplication>false</IsTestApplication>.

Seleziona il corridore

Per impostazione predefinita, MSTest SDK si basa su Microsoft.Testing.Platform, ma è possibile passare a VSTest aggiungendo la proprietà <UseVSTest>true</UseVSTest>.

Estendere Microsoft.Testing.Platform

È possibile personalizzare l'esperienza di Microsoft.Testing.Platform tramite un set di estensioni del pacchetto NuGet. Per semplificare e migliorare questa esperienza, MSTest SDK introduce due funzionalità:

Profilo della Piattaforma di Microsoft.Testing

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:

Di seguito è riportato un esempio completo, usando il profilo None:

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

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

</Project>
Estensione/Profilo Nessuno Predefinito AllMicrosoft
Copertura del codice ✔️ ✔️
dump di arresto anomalo del sistema ✔️
Falsi ✔️¹
scarica sospesa ✔️
Ricaricamento rapido ✔️
riprovare ✔️
Trx ✔️ ✔️
AzureDevOpsReport ✔️²

¹ MSTest.Sdk 3.7.0+ ² MSTest.Sdk 3.11.0+

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 del file di dump di arresto anomalo (pacchetto NuGet Microsoft.Testing.Extensions.CrashDump), è possibile usare la proprietà EnableMicrosoftTestingExtensionsCrashDump seguente impostata su true:

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

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

</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.10.2">

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

</Project>

Funzionalità

Oltre alla selezione del runner e delle relative estensioni specifiche, MSTest.Sdk offre anche funzionalità aggiuntive per semplificare e migliorare l'esperienza di testare.

Test con Aspire

Aspire è uno stack preconfigurato e pronto per il cloud per la creazione di applicazioni distribuibili, osservabili e pronte per la produzione. Aspire è distribuito tramite una raccolta di pacchetti NuGet che gestiscono problematiche specifiche inerenti al cloud-native. Per ulteriori informazioni, vedere la documentazione di 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>

</Project>

Esegui 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>

</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"

Aggiungi la versione al global.json:

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

È 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.*.

Aggiorna il tuo CI

Dopo aver aggiornato i progetti, se si sta utilizzando Microsoft.Testing.Platform (impostazione predefinita) e se ci si basa su dotnet test per eseguire i test, è necessario aggiornare la configurazione CI. Per ulteriori informazioni e per facilitare la comprensione di tutte le modifiche necessarie, consultare l'integrazione dei test di dotnet.

Se si utilizza la modalità VSTest di dotnet test, ecco un esempio di aggiornamento quando si utilizza l'attività DotNetCoreCLI in Azure DevOps:

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

Limitazioni note

Gli SDK MSBuild forniti da NuGet (incluso MSTest.Sdk) hanno un supporto limitato per gli strumenti quando si tratta di aggiornare la versione, ovvero il consueto aggiornamento NuGet e l'interfaccia utente di Visual Studio per la gestione dei pacchetti NuGet non funziona come previsto. Sarà necessario aggiornare manualmente la versione nel global.json file e nel file di progetto. Questo vale anche se si usa Dependabot a causa di problemi dependabot-core#12824 e dependabot-core#8615.

Vedi anche