2010-05-04 29 views
6

Tutti i miei test per il mio aspetto codice Groovy come questoTest Wrapping JUnit (in Eclipse)

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

perché ho bisogno di disinfettare ogni possibile StackTrace che appare (altrimenti è molto difficile da leggere in quanto è ottenuto tutto il Meta-codice Groovy). Esiste un modo per specificare che tutti i test di JUnit vengono incapsulati in un modo particolare (come un gestore di errori)?

Nota: Io sto eseguendo questi in Eclipse, ma se c'è un modo per farlo in IntelliJ o Netbeans, sarebbe bene sapere.

risposta

7

Sì, utilizzare una regola. Fondamentalmente è necessario avere una classe che implementa l'interfaccia MethodRule che gestisce la gestione delle eccezioni nel metodo apply sostituendo la propria implementazione Statement che ha il try/catch in esso.

Per utilizzare una regola si definisce un campo nella classe di test in questo modo:

@Rule public MethodRule exceptionCleanser = new ExceptionCleanser(); 

Una prima implementazione taglio sarebbe probabilmente guardare qualcosa di simile:

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);  
       } 
       } 
      }; 
     } 
    } 

È possibile che questo è del tutto testato, ma dovresti essere in grado di ottenere l'idea. L'annotazione @Rule è stata introdotta in JUnit 4.7, quindi potrebbe essere necessario aggiornare per usarlo.

+0

Grazie a @Yishai. Controllerò qui quando avrò il codice reale. –

+0

Basta fare alcune note :) 'println (junit.runner.Version.id());' –

+0

Hmmm ... la sintassi sembra essere a posto, ma il metodo 'apply' non viene mai eseguito. Stiamo ancora pensando a questa cosa ... –