2010-05-04 6 views
6

Tous mes tests pour mon regard de code Groovy comme celui-ciTests JUnit d'emballage (dans Eclipse)

public void testButtons() { 
    try { 
     page.getButtons(); 
    } catch (Exception e) { 
     throw org.codehaus.groovy.runtime.StackTraceUtils.sanitize(e);  
    } 
} 

parce que je dois désinfecter toute StackTrace possible qui apparaît (sinon il est très difficile à lire car il a tous les Méta-code Groovy). Est-il possible de spécifier que tous les tests JUnit sont enveloppés de façon particulière (comme un gestionnaire d'erreur)?

Remarque: Je les exécute dans Eclipse, mais s'il existe un moyen de le faire dans IntelliJ ou Netbeans, cela serait bon à savoir.

Répondre

7

Oui, utilisez une règle. Fondamentalement, vous devez avoir une classe qui implémente l'interface MethodRule qui gère la gestion des exceptions dans la méthode apply en substituant sa propre implémentation Statement qui contient le try/catch.

Pour utiliser une règle que vous définissez un champ dans la classe de test comme ceci:

@Rule public MethodRule exceptionCleanser = new ExceptionCleanser(); 

Une première mise en œuvre de coupe chercherais probablement quelque chose comme ceci:

public class ExceptionCleanser implements MethodRule { 

     public Statement apply(final Statement base, FrameworkMethod method, Object target) { 
      return new Statement() { 
       public void evaluate() throws Throwable { 
       try { 
        base.evaluate(); 
       } catch (Exception e) { 
         throw org.codehaus.groovy.runtime.StackTraceUtils.sanitize(e);  
       } 
       } 
      }; 
     } 
    } 

Ce qui précède est totalement non testé, mais vous devriez être capable d'avoir l'idée. L'annotation @Rule a été introduite dans JUnit 4.7, vous devrez peut-être mettre à jour pour l'utiliser.

+0

Merci @Yishai. Je reviendrai ici quand j'aurai le vrai code. –

+0

Juste de prendre quelques notes :) 'println (junit.runner.Version.id());' –

+0

Hmmm ... la syntaxe semble être très bien, mais la méthode 'apply' n'est jamais exécutée. Toujours en train de comprendre cette chose ... –

Questions connexes