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.

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

Vedi anche