2009-08-14 4 views
2

J'utilise TeamCity pour réaliser des versions automatisées de tests et de production. TeamCity exécute nos tests mbUnit 3.1 à la fin du processus avec Gallio. Lors de l'exécution de la version de test, Gallio doit essayer d'exécuter des tests sur le serveur de base de données de test. Cependant, lors de l'exécution d'une génération de production, ces tests ne doivent pas être exécutés car TeamCity ne peut pas accéder au serveur de base de données de production (et même si la base de données de production était disponible).Comment ignorer un test de manière conditionnelle dans mbUnit?

Comment puis-je marquer un test pour qu'il soit ignoré dans mbUnit en fonction d'une valeur booléenne telle que IsDBOnline?

Répondre

3

Créer une sous-classe de TestDecoratorAttribute et remplacer la méthode Initialize() pour vérifier IsDBOnline et appeler Assert.Inconclusive() si false.

Une autre façon d'obtenir un effet similaire est d'ajouter un attribut [Category] aux tests qui utilisent le Db, puis de les filtrer lors de l'exécution des tests en production.

+1

En fait, au lieu d'appeler Assert.Inconclusive, vous trouverez peut-être préférable de lancer une exception spéciale qui définit le résultat du test: throw new SilentTestException (TestOutcome.Ignored, "Some message"); –

+1

Et maintenant que j'y pense, j'ai créé une méthode pour ça aussi! Assert.TerminateSilently (TestOutcome.Ignored, "Some message"); –

+0

J'ai sous-classé TestDecoratorAttribute comme vous l'avez suggéré, remplacer la méthode Initilize, puis appelée Assert.TerminateSilently lorsque la base de données est hors ligne, et base.Initialize lorsqu'elle l'était. Cela a fonctionné très bien! Merci! –

Questions connexes