2014-11-06 14 views
7

Sto sperimentando con il corridore JUnit Enclosed per provare a migliorare l'organizzazione di alcuni dei miei test. Al momento sto cercando di capire come condividere alcune impostazioni tra le classi interne.JUnit Runner chiuso e configurazione condivisa

Tentativo la prima:

@RunWith(Enclosed.class) 
public class EnclosedTest { 

    @Before 
    public void printSomething() { 
     System.out.println("Helllooo Meggan"); 
    } 

    public static class FirstTest { 

     @Test 
     public void assertThatSomethingIsTrue() { 
      assertThat(true, is(true)); 
     } 
    } 

    public static class SecondTest { 

     @Test 
     public void assertThatSomethingIsFalse() { 
      assertThat(false, is(false)); 
     } 
    } 
} 

Purtroppo, nessuno dice ciao a Meggan. Se aggiorno una classe interna per estendere quello esterno, allora ottengo il seguente:

java.lang.Exception: class 'org.scratch.EnclosedTest$FirstTest' (possibly indirectly) contains itself as a SuiteClass 
at org.junit.runners.model.InitializationError.<init>(InitializationError.java:32) 

C'è una particolare Enclosed linguaggio da usare quando si cerca di condividere l'installazione tra le classi di test interne? Speravo che sarebbe stato semplice come lo C# example I found.

risposta

12

Enclosed runner internamente funziona come Suite, ovvero esegue le classi come casi di test. E poiché Junit 4.12 le classi interne astratte vengono ignorate dal corridore incluso.

che dicono che il modo per condividere istituito è quello di creare una classe astratta che lo contiene (@Before, @After):

@RunWith(Enclosed.class) 
public class EnclosedTest { 

    abstract public static class SharedSetUp { 
    @Before 
    public void printSomething() { 
     System.out.println("Helllooo Meggan"); 
    } 
    } 

    public static class FirstTest extends SharedSetUp { 
    @Test 
    public void assertThatSomethingIsTrue() { 
     assertThat(true, is(true)); 
    } 
    } 

    public static class SecondTest extends SharedSetUp { 
    @Test 
    public void assertThatSomethingIsFalse() { 
     assertThat(false, is(false)); 
    } 
    } 
} 

Si noti che si può anche dichiarare i corridori personalizzati per ogni sottoclasse.

Problemi correlati