2013-09-06 33 views
6

Quando si scrive codice che interagisce con risorse esterne (come l'utilizzo di un servizio Web o altre operazioni di rete), spesso struttura le classi in modo che possa essere "stub" anche utilizzando un file o qualche altro metodo di input. Quindi, finisco per usare l'implementazione stub per testare altre parti del sistema e poi uno o due test che testano specificamente chiamando il servizio web.Escludere alcuni test JUnit dalla suite di test automatizzata

Il problema è che non voglio chiamare questi servizi esterni né da Jenkins né quando eseguo tutti i test per il mio progetto (ad esempio "gradle test"). Alcuni servizi hanno effetti collaterali o potrebbero non essere accessibili a tutti gli sviluppatori.

In questo momento annoto solo e quindi commento nuovamente l'annotazione @Test su questi particolari metodi di test per abilitarli e disabilitarli. Abilitalo, eseguilo manualmente per controllarlo, quindi ricordati di commentarlo nuovamente.

// Uncomment to test external service manually 
//@Test 
public void testSomethingExternal() { 

C'è un modo migliore per farlo?

EDIT: Per unit testing manuale, io uso Eclipse e sono in grado di basta fare clic destro sul metodo di prova e fare Run As -> test JUnit. Ma questo non funziona senza l'annotazione (non commentata).

+0

Non è chiaro se si desideri un "profilo" automatico dei test delle unità che è possibile alternare tra loro o semplicemente un modo più semplice di attivarli manualmente durante lo sviluppo. – chrylis

+0

@chrylis Quello che stavo cercando di fare in origine era di eseguire un test individuale. Tuttavia, l'idea di creare un profilo separato per questi tipi di test è probabilmente un approccio migliore. Anche se vorrei ancora la possibilità di eseguire alcuni test separatamente (nei casi in cui ci sono effetti collaterali, ad esempio - che cerco di evitare ma a volte è inevitabile). –

risposta

2

Per quanto posso vedere, utilizzare gradle e API per JUnit dice che l'annotazione @Ignore disabilita il test. Aggiungerò il compito gradle che aggiungerà @Ignore per quei test.

3

Se si desidera disabilitare i test per funzionalità che non sono state ancora scritte o disabilitare temporaneamente alcuni test temporaneamente, è possibile utilizzare @Ignore; i test verranno saltati ma ancora annotati nel report.

Se si desidera qualcosa come i Profili di primavera, in cui è possibile definire set di regole per i quali eseguire i test quando, è necessario dividere i test in casi di test separati o utilizzare uno Filter.

+0

Interessante. Vedere la mia modifica qui sopra - forse potrei fare un filtro che rileva quando eseguo un singolo test in Eclipse e (un) filtra il metodo di test in modo appropriato. (Non avevo pensato che questo fosse come i profili di Spring, ma sì è abbastanza simile.) –

6

Si consiglia di utilizzare le categorie junit. Vedi questo blog per dettagli: https://community.oracle.com/blogs/johnsmart/2010/04/25/grouping-tests-using-junit-categories-0.

In pratica, è possibile annotare alcuni test come se fossero in una categoria speciale e quindi è possibile impostare due suite di test: una che esegue i test di quella categoria e una che ignora i test in quella categoria (ma esegue tutto il resto)

@Category(IntegrationTests.class) 
public class AccountIntegrationTest { 

    @Test 
    public void thisTestWillTakeSomeTime() { 
    ... 
    } 

    @Test 
    public void thisTestWillTakeEvenLonger() { 
    .... 
    } 

}

si può anche annotare singole prove"

public class AccountTest { 

    @Test 
    @Category(IntegrationTests.class) 
    public void thisTestWillTakeSomeTime() { 
    ... 
    } 

Ogni volta che vedo qualcosa manualmente sempre acceso o spento I C Ringe.

+0

Grazie - sembra una buona idea. Non sono sicuro di come questo interagisca con Gradle o Eclipse, dovremo verificarlo ulteriormente. –

+0

funziona bene in eclissi. fai ancora lo stesso Run As -> Junit – dkatzel