[VS2012] Exécuter chacun de ses tests unitaires dans un AppDomain différent, c’est maintenant possible avec Visual Studio Test Extensions !

Aujourd’hui je viens de publier sur CodePlex mon projet Visual Studio Test Extensions qui contient des fonctionnalités complémentaires au moteur MSBuild afin de simplifier au maximum les tests automatiques, et bien évidemment en particulier, les tests unitaires !

Ce projet à pour 2 objectifs :

  • Proposer une infrastructure très légère permettant de faciliter la mise en place technique de certains tests unitaires (par exemple les tests unitaires avec les bases de données).
  • Proposer des méthodes utilitaires permettant de contrôler très facilement les résultats des tests (équivalent des classes Assert de Microsoft).

Désolé de vous décevoir, mais ce projet ne fait pas le codage automatique de vos tests unitaires ! (Ça serait trop beau ! Peut-être à la version 22 dans une dizaine d’années qui sait…). Il propose juste des outils purement techniques pour réaliser vos tests unitaires afin de vous concentrer plus facilement sur le test fonctionnel de vos tests unitaires.

Ce projet sera le fruit de mes 10 années d’expérience sur les tests automatiques. Durant ces 10 années j’ai été confronté à différents problèmes techniques durant le codage de mes tests automatiques à travers mes différentes missions de développement.

Pour la petite histoire, depuis 2003, j’avais commencé à réalisé une bibliothèque qui permettait de simplifier le codage des tests unitaires. Je l’utilisais pour le développement de mes propres applications et la donnait gratuitement à certains de mes clients (ceux qui étaient réellement motivés au codage des tests unitaires…). Depuis Visual Studio 2010, il est maintenant possible et très facile d’étendre le moteur MSTest. Ma bibliothèque étant très vieille d’un point de vue conception, j’ai donc décidé de la re-développer en utilisant au maximum les fonctionnalités nouvelles du .NET Framework et de Visual Studio 2010/2012 et 2013.

Actuellement le projet Visual Studio Test Extensions est à sa première version 1.0.0 et permet d’exécuter très simplement des tests unitaires dans des AppDomain séparés ! La question que doivent se poser certaines personnes, est quel est l’avantage d’exécuter les tests unitaires dans un AppDomain séparé ? Et bien étant donné que le moteur MSTest exécute tous les tests unitaires dans un seul AppDomain, vos tests unitaires partagent le même environnement d’exécution et donc les mêmes variables statiques dans votre code ! Cela peut donc vous poser des problèmes lorsque l’on essaye de tester des Singleton ou des classes qui mettent en cache des objets… Avec Visual Studio Test Extensions, il est très simple d’exécuter des tests unitaires dans un AppDomain séparé en changeant l’attribut TestClass de Microsoft par le nouvel attribut UnitTestClass. Et c’est tout !!! Ainsi, plus besoin de se soucier techniquement du code que vous testez ! A chaque exécution d’un test unitaire, un nouvel environnement est chargé en mémoire pour exécuter votre code à tester !

J’attire votre attention que le fait d’exécuter vos tests unitaires dans un AppDomain séparé ralentira légèrement l’exécution de vos tests unitaires… En effet, il faut à chaque test unitaire charger votre code (les assemblys) ce qui peut demander un certains temps… Donc lorsque vous aurez comme moi, 15 000 tests unitaires à exécuter sur votre machine, vous passerez par des serveurs de build ou de test pour exécuter vos tests unitaires de manière automatique !

En ce qui concerne la roadmap de ce projet j’envisage certainement d’ici la fin du mois :

  • Proposer des attributs permettant de simplifier certaines tâches comme l’exécution de script SQL, le changement de la configuration (connection strings, appSettings,…) de vos tests unitaires, etc.
  • Proposer des méthodes utilitaires pour faciliter les vérifications des résultats de test unitaire (par exemple pour contrôler que 2 IEnumerable sont identiques).

Le projet est consultable en cliquant sur ce lien. Si vous avez des commentaires, insultes ou menaces de mort à me faire, essayez dans le mesure du possible de le faire en anglais sur le site CodePlex dans la section « Discussions » afin d’en faire profiter toute la communauté des développeurs !

Leave a comment