Guide de migration MSTest v3
Ce guide aide les utilisateurs à mettre à niveau leurs projets MSTest de MSTest v1 vers MSTest v3. MSTest v3 introduit de nouvelles fonctionnalités, optimisations et quelques changements cassants pour améliorer la fiabilité des tests, la vitesse d’exécution et la compatibilité avec les frameworks .NET modernes.
Qui est affecté ?
Ce guide est destiné aux projets actuellement .NET Framework à l’aide de MSTest v1 via les deux :
- Références d’assembly : projets faisant
Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
référence directement. - Packages NuGet : Projets utilisant
MSTest.TestFramework
le package NuGet avec la version 1.0.0-1.4.0.
Si votre projet s’appuie sur MSTest pour les tests unitaires et inclut les références ci-dessus, il bénéficie des améliorations apportées à MSTest v3 et nécessite des ajustements décrits dans ce guide.
Pourquoi migrer vers MSTest v3 ?
Même si vous êtes satisfait de votre configuration MSTest actuelle, la mise à niveau vers MSTest v3 déverrouille des avantages substantiels qui améliorent la qualité et la préparation future de vos tests. Voici pourquoi faire passer le commutateur peut maintenant être une étape importante :
Sécurité renforcée : MSTest v1 présente des vulnérabilités de sécurité connues. Avec MSTest v3, nous avons implémenté des améliorations de sécurité étendues pour protéger votre environnement de test.
Améliorations immédiates des performances : MSTest v3 réduit considérablement le temps d’exécution des tests et optimise l’utilisation des ressources. Cela est particulièrement utile dans les pipelines CI/CD, où des tests plus rapides peuvent raccourcir les cycles de déploiement et réduire les coûts d’infrastructure.
Vérification future de vos tests : MSTest v3 offre une prise en charge robuste pour les versions modernes de .NET, notamment .NET 8 et les itérations futures, ainsi que la compatibilité multiplateforme. Cela signifie que vos tests seront plus adaptables et prêts à être mis à niveau, ce qui évite la dette technique des infrastructures de test obsolètes.
Amélioration de la fiabilité du code avec de nouveaux analyseurs : les analyseurs de code intégrés MSTest v3 appliquent les meilleures pratiques, ce qui permet d’intercepter les problèmes au début et de promouvoir un code de test plus propre et plus facile à gérer :
Détection proactive des problèmes : les analyseurs fournissent des commentaires en temps réel, suggérant des améliorations et signalant les problèmes potentiels lors de l’écriture de vos tests.
Assertions de type sécurisées plus fortes : remplacement des surcharges ambiguës, MSTest v3 applique des assertions de type sécurisées, réduisant le risque de comportement de test incorrect et rendant les tests plus fiables.
Code plus propre, Moins de maintenance : en alignant vos tests avec les normes MSTest et les meilleures pratiques, MSTest v3 vous aide à maintenir une base de code plus propre et plus gérable, ce qui réduit la dette technique au fil du temps.
Plus grande flexibilité et extensibilité : MSTest v3 prend en charge les scénarios de test avancés, notamment les sources de données dynamiques et l’exécution parallèle dans l’assembly. Cette flexibilité permet des approches de test plus sophistiquées et accélère les suites de tests sans configurations complexes.
En mettant à niveau, vous configurez vos tests pour être plus rapide, plus fiable et adaptable aux développements .NET futurs, en positionnant votre projet pour une réussite à long terme et une maintenance plus facile.
Étapes de la migration
1. Supprimer la référence d’assembly
Pour les projets utilisant MSTest v1 via des références d’assembly, il existe une référence à la DLL suivante :
Microsoft.VisualStudio.QualityTools.UnitTestFramework
Dans les projets de style non sdk, ces références sont souvent ajoutées via Visual Studio plutôt qu’en modifiant directement le code XML. Pour supprimer ces références à l’aide de l’interface graphique graphique Visual Studio :
Ouvrez Explorateur de solutions dans Visual Studio.
Développez le nœud de projet pour le projet à l’aide de MSTest.
Recherchez le dossier Références dans le projet.
Dans le dossier Références , recherchez et sélectionnez les références DE DLL MSTest,
Microsoft.VisualStudio.QualityTools.UnitTestFramework
Cliquez avec le bouton droit sur la ou les références sélectionnées, puis choisissez Supprimer dans le menu contextuel.
Enregistrez le projet pour appliquer des modifications.
2. Mettre à jour votre projet
Vous pouvez mettre à jour votre projet vers MSTest v3 de deux façons :
Mettre à jour les packages : si vous avez des références de package NuGet à MSTest.TestFramework et MSTest.TestAdapter, mettez-les à jour à l’aide du Gestionnaire de package NuGet dans Visual Studio ou en exécutant la commande suivante dans la console NuGet Gestionnaire de package :
Update-Package MSTest.TestFramework -Version 3.6.2 Update-Package MSTest.TestAdapter -Version 3.6.2
Ou installez le package MSTest : installez le dernier package MSTest à l’aide du Gestionnaire de package NuGet dans Visual Studio ou en exécutant la commande suivante dans la console NuGet Gestionnaire de package :
Install-Package MSTest -Version 3.6.2
Ou mettez à jour le fichier projet directement (pour les projets de style SDK) : Mettez à jour votre
.csproj
fichier pour spécifier la version du SDK MSTest.<Project Sdk="MSTest.Sdk/3.6.2"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> </PropertyGroup> </Project>
Choisissez l’option qui convient le mieux à votre configuration de projet. Les deux méthodes garantissent que votre projet est mis à niveau pour utiliser MSTest v3.
3. Mettre à jour votre code
Assert.AreEqual/AreNotEqual ou Assert.AreSame/AreNotSame (avec objet) Si l’une de ces assertions provoque des erreurs, nous vous recommandons de vérifier que les types comparés sont compatibles. Si c’est le cas, envisagez d’ajouter un type générique explicite pour résoudre le problème.
utilisation de génériques :
Assert.AreEqual<customObject>(expectedObject, actualObject); Assert.AreNotEqual<customObject>(expectedObject, actualObject);
Initialisation de test : utilisez des
TestInitialize
méthodes pour l’initialisation asynchrone.Nettoyage : utilisez des
TestCleanup
méthodes ou leDispose
modèle de nettoyage.RunSettings : le
.testsettings
fichier n’est plus pris en charge, ce qui signifie<LegacySettings>
qu’il n’est plus disponible. Utilisez .runsettings pour la configuration de test.
Nouvelles fonctionnalités dans MSTest v3
- Amélioration des valeurs par défaut pour les projets de test
- Configuration et utilisation simplifiées
- Extensibilité améliorée de l’exécuteur MSTest
- Nouveaux analyseurs de code basés sur Roslyn pour améliorer le développement de tests
- Prise en charge des applications WinUI
- Exécution parallèle dans l’assembly
- Sources de données dynamiques pour les tests pilotés par les données
Fonctionnalités déconseillées
- Prise en charge supprimée pour :
- .NET Framework 4.5 (utilisez .NET 4.6.2 ou version ultérieure)
- .NET Standard 1.0 (utilisez .NET Standard 2.0)
- Versions UWP antérieures à 16299
- Versions WinUI antérieures à 18362
- .NET 5 (utilisez .NET Core 3.1 ou .NET 6)
Modifications cassants et API supprimées
Surcharges d’assertion
Si Les assertions AreEqual, AreNotEqual, AreSame ou AreNotSame provoquent des erreurs, nous vous recommandons de vérifier que les types comparés sont compatibles. Si c’est le cas, envisagez d’ajouter un type générique explicite pour résoudre le problème.
Mises à jour de DataRowAttribute
Les constructeurs DataRowAttribute dans MSTest v3 ont été simplifiés pour appliquer la correspondance de type pour les paramètres. Cela signifie que vous devez spécifier des valeurs dans DataRow qui correspondent précisément aux types des paramètres de méthode.
Exemple :
[TestMethod]
[DataRow(1, "test")] // Correct: matches parameter types (int, string)
public void MyTestMethod(int number, string text) { ... }
Dans les cas où les types ne correspondent pas exactement, MSTest v3 génère désormais une erreur plutôt que de tenter une conversion.
Paramètres liés au délai d'expiration
Dans MSTest v3, la gestion des Timeout
paramètres a été standardisée pour garantir un comportement cohérent dans différents environnements .NET. Cette modification peut avoir un impact sur les tests qui s’appuient sur des valeurs de délai d’attente spécifiques, en particulier si ces tests sont asynchrones ou exécutés dans différents frameworks.
- Dans MSTest v1 ou v2, certains paramètres de délai d’attente peuvent avoir été interprétés différemment selon l’infrastructure (par exemple, .NET Framework et .NET Core).
- MSTest v3 applique un comportement de délai d’attente cohérent, ce qui peut signifier que les tests configurés avec des délais d’attente dans les versions précédentes peuvent échouer ou se comporter différemment si les valeurs de délai d’attente sont trop courtes sous la nouvelle norme.
Ce que cela signifie :
Les tests avec des délais d’attente peuvent nécessiter un ajustement : si vos tests ont un
Timeout
attribut avec des durées spécifiques, vérifiez que ces valeurs permettent toujours au test de se terminer sous MSTest v3. Les tests passés avec un certain délai d’attente peuvent nécessiter une valeur de délai d’expiration plus élevée ou inférieure pour fonctionner correctement dans les nouvelles règles.Gestion du délai d’expiration unifié : la gestion du délai d’expiration unifié MSTest v3 rend les délais d’expiration plus prévisibles, mais nécessite la vérification et la mise à jour
Timeout
potentielle des valeurs dans les tests plus anciens.
Exemple :
// 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() { ... }
Modifications de configuration
Vérifiez que .runsettings
les fichiers s’alignent sur la syntaxe et la structure MSTest v3.
Optimisation des performances et de l’exécution parallèles
Configurez l’exécution parallèle dans .runsettings pour améliorer les performances.
Exemple :
<RunSettings>
<RunConfiguration>
<MaxCpuCount>-1</MaxCpuCount> <!-- Uses all available processors -->
</RunConfiguration>
</RunSettings>
Utilisation améliorée des ressources
MSTest v3 optimise la gestion des ressources, ce qui réduit l’utilisation de la mémoire et améliore l’efficacité du processeur.
Gestion des attributs obsolètes et migration d’extensions personnalisées
Passez en revue les attributs déconseillés et remplacez-les par des alternatives MSTest v3 si possible.
Analyseurs de code et bonnes pratiques
MSTest v3 inclut des analyseurs de code intégrés pour les bonnes pratiques, l’évitement des pièges de configuration et l’utilisation appropriée des attributs et paramètres MSTest. Cela est automatiquement disponible lors de l’utilisation du package MSTest ou de MSTest.Sdk, ou vous pouvez installer le package MSTest Analyzer.