2009-10-10 13 views
27

Ho un codice di impostazione comune che ho preso in considerazione per un metodo contrassegnato con @Before. Tuttavia, non è necessario che tutto questo codice venga eseguito per ogni singolo test. C'è un modo per contrassegnarlo in modo che il metodo @Before venga eseguito solo prima di determinati test?JUnit: @Prima solo per alcuni metodi di prova?

risposta

28

Basta spostare i test che non richiedono il codice di installazione in una classe di test separata. Se hai qualche altro codice comune ai test che sarebbe utile tenere, spostalo in una classe helper.

+4

+1 in altre parole, non utilizzare @Prima se non si desidera il comportamento di @Before :) –

+0

reale utile @Kirschstein :(- "fare bene in primo luogo" –

3

Oppure utilizzare TestNG. Ti dà un controllo più dettagliato sui test.

1

È possibile ottenere anche tramite Assume da JUnit. E quindi è possibile controllare il nome del metodo per il quale si desidera elaborare @Before.

public class MyTest { 
    @Rule 
    public TestName testName = new TestName(); 

    @Before 
    public void setUp() { 
     assumeTrue(testName.getMethodName().equals("myMethodName")); 
     // setup follows 
    } 
} 

Controllare il topic per ulteriori delucidazioni su @Rule.

+0

Non utilizzare Supponiamo, si ferma l'esecuzione dell'intero test, non solo del metodo @Before. if (! testName.getMethodName(). equals ("myMethodName")) {return;} (scusa la spaziatura) funzionerebbe meglio. – jMcK

+0

Sinceramente l'idea di "se-test-nome-uguale" non ha senso, come si potrebbe anche chiamare la funzione prima e dopo direttamente nei test che ne hanno bisogno e eliminare le annotazioni Prima e Dopo. – aliteralmind

0

Non sono sicuro di @Before, ma di recente ho elaborato una strategia per il blocco @After in modo selettivo. L'implementazione era semplice. Ho alcuni flag impostati su valori predefiniti come parte della classe di test. Vengono ripristinati ai valori predefiniti nella classe @Before. Nella classe ho bisogno di fare cose specifiche per una bandiera, ho impostato quei flag & in @Dopo aver controllato i valori dei flag per fare i rispettivi lavori.

Problemi correlati