2015-10-05 10 views
9

JUnit @BeforeClass Annotation muss als statisch deklariert werden, wenn Sie möchten, dass es einmal vor allen @Test Methoden ausgeführt wird. Dies kann jedoch nicht mit Abhängigkeitsinjektion verwendet werden.JUnit @BeforeClass nicht-statische Arbeit für Spring Boot-Anwendung

Ich möchte eine Datenbank aufräumen, die ich @Autowire mit Spring Boot, einmal, bevor ich meine JUnit-Tests ausführen. Ich kann nicht @Autowire statische Felder, also muss ich an eine Arbeit denken. Irgendwelche Ideen?

Antwort

17

Verwenden Sie einfach @Before (anstelle von @BeforeClass) (oder BeforeTransaction (je nachdem, wie Sie die Datenbank initialisieren)). Diese Anmerkung muss an eine nicht statische öffentliche Methode angehängt sein.

Natürlich: @Before vor jeder Testfall-Methode ausgeführt werden (nicht wie @BeforeClass, die nur einmal ausgeführt wird.) Aber wenn Sie es genau einmal ausführen möchten, verwenden Sie ein statisches Markierungsfeld.

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

Ahh ok das ist einfach und macht Sinn. – Kingamere

+0

das mache ich, wenn ich JUnit benutzen muss. Aber ich bevorzuge die Verwendung von TestNG, die alle Anmerkungen zu nicht-statischen Methoden enthält: in Ihrem Fall mit TestNG würde @BeforeClass auf einer nicht-statischen Methode definiert werden und würde einmal vor allen Testmethoden innerhalb dieser Klasse ausgeführt werden. –

0

Sehen Sie sich die Bibliothek DBUnit an - sie wurde entwickelt, um die von Ihnen beschriebenen Aktionen auszuführen. Es kann & Datenbankinstanzen erstellen und bietet Ihnen einfache Möglichkeiten, dies zu tun.

Verwandte Themen