2013-10-04 13 views
5

Ho scritto un numero di test, diviso non solo in classi separate ma, a seconda dell'area dell'area della mia applicazione che stanno testando, in sotto-pacchetti separati. Quindi, la mia struttura pacchetto sembra un po 'come questo:Esecuzione di JUnit4 Classi di test nell'ordine specificato

my.package.tests 
my.package.tests.four 
my.package.tests.one 
my.package.tests.three 
my.package.tests.two 

Nel pacchetto my.package.tests ho una classe genitore che tutti i test nelle sotto-pacchetti da uno a quattro estendono. Ora, vorrei scegliere l'ordine in cui vengono eseguiti i test; non all'interno delle classi (che sembra possibile con lo FixMethodOrder annotation) ma l'ordine delle classi o dei sotto-pacchetti stessi (quindi quelli nel sub-pacchetto one prima, poi quelli in two, ecc.). Alcune classi di test utilizzano lo Parameterized runner, nel caso in cui ciò faccia la differenza. La scelta dell'ordine non è necessaria perché i test abbiano successo, sono indipendenti l'uno dall'altro; sarebbe comunque utile ordinarli in modo da riflettere l'ordine in cui le varie parti del programma sono normalmente utilizzate in quanto rende l'analisi un po 'più semplice.

Ora, preferirei avere un file di configurazione che indichi a JUnit quale ordine devono essere eseguiti i test; Suppongo comunque che non sarà così facile. Quali opzioni ho qui e quale sarebbe la più semplice? Preferirei anche solo elencare i sotto-pacchetti, non le varie classi nei pacchetti o anche le funzioni di test nelle classi.

Sto usando Java 1.6.0_26 (non ho scelta qui) e JUnit 4.11.

risposta

7

È possibile farlo con le suite di test. (puoi "annidare" anche questi)

@SuiteClasses({SuiteOne.class, SuiteTwo.class}) 
@RunWith(Suite.class) 
public class TopLevelSuite {} 

@SuiteClasses({Test1.class, Test2.class}) 
@RunWith(Suite.class) 
public class SuiteOne {} 


@SuiteClasses({Test4.class, Test3.class}) 
@RunWith(Suite.class) 
public class SuiteTwo {} 

... E così via. Utilizzare "toplevelsuite" come punto di ingresso e i test verranno eseguiti nell'ordine in cui viene definito l'array @SuiteClasses.

Per quanto riguarda i metodi di una classe, è possibile specificare l'ordine in cui vengono eseguiti con @FixMethodOrder (come si è già accennato nella sua interrogazione.

+0

Grazie, che funziona come un fascino! Io non immagino che non è il opzione per dire in qualche modo "esegui tutti i test nel seguente pacchetto" però, giusto? – blalasaadri

+0

No, non puoi dire automaticamente di includere tutte le classi in un pacchetto (almeno AFAIK). – blgt

+1

L'idea generale qui è che tu è possibile inserire una classe Suite in ciascun pacchetto, che includerà tutti i test di quel pacchetto, quindi inserire la suite "parent" nel pacchetto padre e includerli in esso, in modo da simulare la gerarchia dei pacchetti nelle classi Suite. – blgt

Problemi correlati