2009-08-05 10 views
0

Je souhaite invoquer une méthode lorsque mon test d'intégration échoue (par exemple, Assert.AreEqual échoue), y a-t-il un délégué d'événement auquel je puisse m'inscrire dans le cadre NUnit? Bien sûr, le délégué à l'événement doit être viré lorsque les tests échouent. C'est parce que dans mes tests il y a beaucoup de Assert déclaration, et je ne peux pas dire besoin de se connecter le Assert, avec les informations d'assertion qui causent un problème dans mon bug tracker. La meilleure façon de procéder consiste à invoquer une méthode déléguée lorsque le test échoue.Echec du gestionnaire d'événements pour s'abonner et Assert.AreEqual

Répondre

0

Il semble qu'il n'y ait aucun cas je ne peux souscrire à en cas d'échec assert

0

Je suis curieux, quel problème essayez-vous de résoudre en faisant cela? Je ne connais pas de moyen de le faire avec NUnit, mais il y a une façon désordonnée de le faire. Vous pouvez fournir un Func et l'appeler comme message d'échec. Le corps du Func peut vous fournir la délégation que vous recherchez.

var callback = new Func<string>(() => { 
     // do something 
     return "Reason this test failed"; 
    }); 
Assert.AreEqual("", " ", callback.Invoke()); 
0

Cela sonne comme vous êtes désireux de créer votre propre lanceur de test.

Il existe une distinction entre les tests (a définit les actions) et le déroulement des tests (en cours d'exécution des tests). Dans ce cas, si vous souhaitez détecter qu'un test a échoué, vous devez le faire lorsque le test est exécuté. Si tout ce que vous cherchez à faire est d'envoyer un email en cas d'échec, il peut être plus facile de créer un script (powershell/batch) qui exécute le coureur de ligne de commande, et envoie un email en cas d'échec ?)

Si vous voulez une interactivité plus complexe, vous devrez peut-être envisager de créer un coureur personnalisé. Le coureur peut lancer le test et agir en fonction des résultats. Dans ce cas, vous devriez regarder dans l'espace de noms Nunit.Core pour l'interface du coureur de test.

Par exemple (non testé):

TestPackage package = new TestPackage(); 
package.add("c:\some\path\to.dll"); 
SimpleTestRunner runner = new SimpleTestRunner(); 
if (runner.Load(Package)){ 
    var results = runner.Run(new NullListener(), TestFilter.Empty, false, LoggingThreshold.Off); 
    if(results.ResultState != ResultState.Success){ 
     ... do something interesting ... 
    } 
} 

EDIT: un meilleur extrait de code https://stackoverflow.com/a/5241900/1961413

Questions connexes