2015-10-05 11 views
9

Adnotacja JUnit's musi być zadeklarowana jako statyczna, jeśli ma być uruchamiana raz przed wszystkimi metodami @Test. Nie można tego jednak użyć z zastrzykiem zależności.JUnit @BeforeClass niestatyczna praca dla aplikacji Spring Boot

Chcę wyczyścić bazę danych, która I @Autowire z Spring Boot, raz przed uruchomieniem moich testów JUnit. Nie mogę ustawić pól statycznych, więc muszę pomyśleć o obejściu. Jakieś pomysły?

Odpowiedz

17

Po prostu użyj @Before (zamiast @BeforeClass) (lub BeforeTransaction (w zależności od sposobu zainicjalizowania bazy danych)). Ta adnotacja musi być dołączona do niestatycznej metody publicznej.

Oczywiście: @Before uruchomić przed KAŻDYM sposobem przypadku testowego (nie jak @BeforeClass, który działa tylko raz.) Ale jeśli chcesz uruchomić go dokładnie raz, użyj pola znacznika statycznego.

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

Ahh, to jest proste i ma sens. – Kingamere

+0

to właśnie robię, gdy muszę używać JUnit. Ale wolę używać TestNG, który ma wszystkie adnotacje dostępne dla metod niestatycznych: w twoim przypadku z TestNG, @BeforeClass byłby zdefiniowany metodami niestatycznymi i byłby wykonywany raz przed wszystkimi metodami testowymi wewnątrz tej klasy. –

0

Zobacz bibliotekę DBUnit - zaprojektowaną do wykonywania opisywanych działań. Może on stworzyć & oderwać instancje bazy danych i oferuje proste sposoby na zrobienie tego.