J'essaie de tester à l'unité un moteur de gestion d'hôte WCF que j'ai écrit. Le moteur crée essentiellement des instances ServiceHost à la volée sur la base de la configuration. Cela nous permet de reconfigurer dynamiquement les services disponibles sans avoir à les arrêter et à les redémarrer à chaque fois qu'un nouveau service est ajouté ou qu'un ancien est supprimé.
J'ai rencontré une difficulté dans le test unitaire de ce moteur de gestion d'hôte, cependant, en raison de la façon dont ServiceHost fonctionne. Si un ServiceHost a déjà été créé, ouvert et n'a pas encore été fermé pour un point de terminaison particulier, un autre ServiceHost pour le même point de terminaison ne peut pas être créé, ce qui entraîne une exception. Étant donné que les plateformes modernes de tests unitaires parallélisent l'exécution des tests, je n'ai aucun moyen efficace de tester ce morceau de code.
J'ai utilisé xUnit.NET, en espérant qu'en raison de son extensibilité, je pourrais trouver un moyen de le forcer à exécuter les tests en série. Cependant, je n'ai pas eu de chance. J'espère que quelqu'un ici sur SO a rencontré un problème similaire et sait comment faire pour que les tests unitaires s'exécutent en série.
NOTE : ServiceHost est une classe WCF, écrite par Microsoft. Je n'ai pas la possibilité de modifier son comportement. Héberger chaque point d'extrémité de service une seule fois est également le bon comportement... cependant, ce n'est pas particulièrement propice aux tests unitaires.