2015-10-05 15 views
9

L'annotazione JUnit @BeforeClass deve essere dichiarata statica se si desidera eseguirla una volta prima di tutti i metodi @Test. Tuttavia, questo non può essere utilizzato con l'iniezione di dipendenza.JUnit @BeforeClass lavoro non statico attorno all'applicazione Spring Boot

Voglio pulire un database che ho @Autowire con Spring Boot, una volta prima di eseguire i miei test JUnit. Non riesco a creare campi statici @Autowire, quindi ho bisogno di pensare a un lavoro. Qualche idea?

risposta

17

Basta usare @Before (anziché @BeforeClass) (o BeforeTransaction (a seconda di come si inizializza il database)). Questa annotazione deve essere allegata a un metodo pubblico non statico.

Naturalmente: @Before eseguire prima di OGNI metodo di test case (non come @BeforeClass che viene eseguito solo una volta.) Ma se si desidera eseguirlo esattamente una volta, quindi utilizzare un campo indicatore statico.

private static boolean initialized = false; 
... 
@Before 
public void initializeDB() { 
    if (!initialized) { 
     ... //your db initialization 
     initialized = true; 
    } 
} 
--- 
+0

Ahh ok questo è semplice e ha senso. – Kingamere

+0

questo è quello che faccio quando devo usare JUnit. Ma preferisco usare TestNG che ha tutte le annotazioni disponibili su metodi non statici: nel tuo caso con TestNG, @BeforeClass verrebbe definito su metodi non statici, e sarebbe eseguito una volta prima di tutti i metodi di test all'interno di quella classe. –

0

Dai un'occhiata alla libreria DBUnit: è progettata per eseguire le azioni che stai descrivendo. Può creare & istanze di database di strappo e fornisce semplici modi per farlo.

0

provare questa soluzione: https://stackoverflow.com/a/46274919/907576:

con @BeforeAllMethods/@AfterAllMethods annotazioni si potrebbe eseguire qualsiasi metodo nella classe di test in un contesto esempio, dove sono disponibili tutti i valori iniettati.