Guida alla migrazione di MSTest v3
Questa guida consente agli utenti di aggiornare i progetti MSTest da MSTest v1 a MSTest v3. MSTest v3 introduce nuove funzionalità, ottimizzazioni e alcune modifiche di rilievo per migliorare l'affidabilità dei test, la velocità di esecuzione e la compatibilità con i moderni framework .NET.
Che è interessato?
Questa guida è destinata ai progetti attualmente progetti .NET Framework che usano MSTest v1 tramite:
- Riferimenti ad assembly: progetti che
Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
fanno riferimento direttamente. - Pacchetti NuGet: progetti che usano
MSTest.TestFramework
il pacchetto NuGet con la versione 1.0.0-1.4.0.
Se il progetto si basa su MSTest per gli unit test e include i riferimenti precedenti, trarrà vantaggio dai miglioramenti di MSTest v3 e richiede modifiche descritte in questa guida.
Perché eseguire la migrazione a MSTest v3?
Anche se si è soddisfatti della configurazione MSTest corrente, l'aggiornamento a MSTest v3 offre vantaggi sostanziali che migliorano sia la qualità che l'idoneità futura dei test. Ecco perché fare il passaggio ora può essere un passo avanti prezioso:
Sicurezza avanzata: MSTest v1 presenta vulnerabilità di sicurezza note. Con MSTest v3 sono stati implementati miglioramenti di sicurezza estesi per proteggere l'ambiente di test.
Incrementi immediati delle prestazioni: MSTest v3 riduce significativamente il tempo di esecuzione dei test e ottimizza l'utilizzo delle risorse. Ciò è particolarmente utile nelle pipeline CI/CD, in cui i test più veloci possono ridurre i cicli di distribuzione e ridurre i costi dell'infrastruttura.
Test a prova futura: MSTest v3 offre un supporto affidabile per le versioni moderne di .NET, tra cui .NET 8 e iterazioni future, insieme alla compatibilità multipiattaforma. Ciò significa che i test saranno più adattabili e pronti per gli aggiornamenti, evitando il debito tecnico dei framework di test obsoleti.
Maggiore affidabilità del codice con i nuovi analizzatori: gli analizzatori di codice predefiniti MSTest v3 applicano le procedure consigliate, consentendo di intercettare i problemi in anticipo e promuovere codice di test più pulito e gestibile:
Rilevamento proattivo dei problemi: gli analizzatori forniscono commenti e suggerimenti in tempo reale, che suggeriscono miglioramenti e segnalano potenziali problemi durante la scrittura dei test.
Asserzioni indipendenti dai tipi più avanzate: la sostituzione di overload ambigui, MSTest v3 applica asserzioni indipendenti dai tipi, riducendo il rischio di comportamenti di test non corretti e rendendo i test più affidabili.
Codice più pulito, minore manutenzione: allineando i test agli standard MSTest e alle procedure consigliate, MSTest v3 consente di mantenere una codebase più pulita e gestibile, riducendo il debito tecnico nel tempo.
Maggiore flessibilità ed estendibilità: MSTest v3 supporta scenari di test avanzati, incluse origini dati dinamiche ed esecuzione parallela in assembly. Questa flessibilità consente approcci di test più sofisticati e velocizza i gruppi di test senza configurazioni complesse.
Eseguendo l'aggiornamento, si stanno configurando i test in modo che siano più veloci, affidabili e adattabili agli sviluppi futuri di .NET, posizionando il progetto per un successo a lungo termine e una manutenzione più semplice.
Passaggi per la migrazione
1. Rimuovere il riferimento all'assembly
Per i progetti che usano MSTest v1 tramite riferimenti all'assembly, è disponibile un riferimento alla DLL seguente:
Microsoft.VisualStudio.QualityTools.UnitTestFramework
Nei progetti di tipo non SDK, questi riferimenti vengono spesso aggiunti tramite Visual Studio anziché modificando direttamente il codice XML. Per rimuovere questi riferimenti usando l'interfaccia utente grafica di Visual Studio:
Aprire Esplora soluzioni in Visual Studio.
Espandere il nodo del progetto per il progetto usando MSTest.
Individuare la cartella Riferimenti all'interno del progetto.
All'interno della cartella Riferimenti trovare e selezionare i riferimenti alla DLL MSTest,
Microsoft.VisualStudio.QualityTools.UnitTestFramework
Fare clic con il pulsante destro del mouse sui riferimenti selezionati e scegliere Rimuovi dal menu di scelta rapida.
Salvare il progetto per applicare le modifiche.
2. Aggiornare il progetto
È possibile aggiornare il progetto a MSTest v3 in uno dei due modi seguenti:
Pacchetti di aggiornamento: se sono presenti riferimenti al pacchetto NuGet per MSTest.TestFramework e MSTest.TestAdapter, aggiornarli usando il Gestione pacchetti NuGet in Visual Studio o eseguendo il comando seguente nella console di nuGet Gestione pacchetti:
Update-Package MSTest.TestFramework -Version 3.6.2 Update-Package MSTest.TestAdapter -Version 3.6.2
In alternativa, installare il pacchetto MSTest più recente usando il Gestione pacchetti NuGet in Visual Studio o eseguendo il comando seguente nella console di nuGet Gestione pacchetti:
Install-Package MSTest -Version 3.6.2
In alternativa, aggiornare direttamente il file di progetto (per i progetti in stile SDK): aggiornare il
.csproj
file per specificare la versione di MSTest SDK.<Project Sdk="MSTest.Sdk/3.6.2"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> </PropertyGroup> </Project>
Scegliere l'opzione più adatta alla configurazione del progetto. Entrambi i metodi assicurano che il progetto venga aggiornato per usare MSTest v3.
3. Aggiornare il codice
Assert.AreEqual/AreNotEqual o Assert.AreSame/AreNotSame (con oggetto) Se una di queste asserzioni causa errori, è consigliabile verificare che i tipi confrontati siano compatibili. In caso affermativo, prendere in considerazione l'aggiunta di una digitazione generica esplicita per risolvere il problema.
uso di generics:
Assert.AreEqual<customObject>(expectedObject, actualObject); Assert.AreNotEqual<customObject>(expectedObject, actualObject);
Inizializzazione test: usare
TestInitialize
metodi per l'inizializzazione asincrona.Pulizia: usare
TestCleanup
metodi o ilDispose
modello per la pulizia.RunSettings: il
.testsettings
file non è più supportato, ovvero<LegacySettings>
non è più disponibile. Usare .runsettings per la configurazione di test.
Nuove funzionalità in MSTest v3
- Impostazioni predefinite migliorate per i progetti di test
- Configurazione e utilizzo semplificati
- Estendibilità avanzata dello strumento di esecuzione MSTest
- Nuovi analizzatori di codice basati su Roslyn per migliorare lo sviluppo di test
- Supporto per le applicazioni WinUI
- Esecuzione parallela dell'assembly
- Origini dati dinamiche per test basati sui dati
Caratteristiche deprecate
- Supporto eliminato per:
- .NET Framework 4.5 (usare .NET 4.6.2 o versione successiva)
- .NET Standard 1.0 (usare .NET Standard 2.0)
- Versioni UWP precedenti alla 16299
- Versioni di WinUI precedenti alla 18362
- .NET 5 (usare .NET Core 3.1 o .NET 6)
Modifiche di rilievo e API rimosse
Overload di asserzione
Se AreEqual, AreNotEqual, AreSame o AreNotSame generano errori, è consigliabile verificare che i tipi confrontati siano compatibili. In caso affermativo, prendere in considerazione l'aggiunta di una digitazione generica esplicita per risolvere il problema.
DataRowAttribute
Aggiornamenti
I costruttori DataRowAttribute in MSTest v3 sono stati semplificati per applicare la corrispondenza dei tipi per i parametri. Ciò significa che è necessario specificare valori in DataRow che corrispondono esattamente ai tipi dei parametri del metodo.
Esempio:
[TestMethod]
[DataRow(1, "test")] // Correct: matches parameter types (int, string)
public void MyTestMethod(int number, string text) { ... }
Nei casi in cui i tipi non corrispondono esattamente, MSTest v3 genererà ora un errore anziché tentare una conversione.
Impostazioni di timeout
In MSTest v3 la gestione delle Timeout
impostazioni è stata standardizzata per garantire un comportamento coerente in ambienti .NET diversi. Questa modifica può influire sui test che si basano su valori di timeout specifici, soprattutto se tali test sono asincroni o eseguiti in framework diversi.
- In MSTest v1 o v2 alcune impostazioni di timeout potrebbero essere state interpretate in modo diverso a seconda del framework ( ad esempio .NET Framework e .NET Core).
- MSTest v3 applica un comportamento di timeout coerente, il che potrebbe significare che i test configurati con timeout nelle versioni precedenti potrebbero non riuscire o comportarsi in modo diverso se i valori di timeout sono troppo brevi rispetto al nuovo standard.
Cosa significa:
Test con timeout potrebbe essere necessario rettificare: se i test hanno un
Timeout
attributo con durate specifiche, verificare che tali valori consentano comunque il completamento del test in MSTest v3. I test passati in precedenza con un determinato timeout potrebbero richiedere un valore di timeout superiore o inferiore per funzionare correttamente in base alle nuove regole.Gestione unificata del timeout: la gestione unificata del timeout MSTest v3 rende i timeout più prevedibili, ma richiede il controllo e l'aggiornamento
Timeout
dei valori nei test meno recenti.
Esempio:
// Old (v1/v2) - Timeout was sometimes interpreted inconsistently
[TestMethod]
[Timeout(2000)] // Timeout in milliseconds
public void TestMethod() { ... }
// New (v3) - Unified handling of timeout
[TestMethod]
[Timeout(2000)] // Verify this value still works under MSTest v3
public async Task TestMethod() { ... }
Modifiche alla configurazione
Assicurarsi che .runsettings
i file siano allineati alla sintassi e alla struttura MSTest v3.
Esecuzione parallela e ottimizzazione delle prestazioni
Configurare l'esecuzione parallela in .runsettings per migliorare le prestazioni.
Esempio:
<RunSettings>
<RunConfiguration>
<MaxCpuCount>-1</MaxCpuCount> <!-- Uses all available processors -->
</RunConfiguration>
</RunSettings>
Miglioramento dell'utilizzo delle risorse
MSTest v3 ottimizza la gestione delle risorse, con conseguente riduzione dell'utilizzo della memoria e una migliore efficienza della CPU.
Gestione degli attributi obsoleti e migrazione di estensioni personalizzate
Esaminare gli attributi deprecati e sostituirli con le alternative MSTest v3, se possibile.
Analizzatori del codice e procedure consigliate
MSTest v3 include analizzatori di codice predefiniti per le procedure consigliate, evitando errori di configurazione e l'uso corretto di attributi e impostazioni MSTest. Questa funzionalità è disponibile automaticamente quando si usa il pacchetto MSTest o MSTest.Sdk oppure è possibile installare il pacchetto MSTest Analyzer.