Ich habe ein Projekt, das ich mit Maven baue und das Hibernate (und Spring) verwendet, um Daten aus einer Datenbank usw. abzurufen.
Meine "Tests" für die DAOs in meinem Projekt erweitern Spring's, AbstractTransactionalDataSourceSpringContextTests
sodass eine DataSource mit meiner zu testenden Klasse verbunden werden kann, um die Abfrage- / Ruhezustandslogik tatsächlich ausführen, Daten abrufen usw. zu können.
Bei mehreren anderen Projekten habe ich diese Testtypen zusammen mit einer HSQL-Datenbank (entweder im Arbeitsspeicher oder auf eine Datei gerichtet) verwendet, um die tatsächliche Datenbankabfragelogik effizient testen zu können, ohne auf eine externe Datenbank angewiesen zu sein. Dies funktioniert hervorragend, da externe Abhängigkeiten vermieden werden und der "Status" der Datenbank vor dem Ausführen der Tests (von denen jeder in eine Transaktion eingeschlossen ist, die zurückgesetzt wird) genau definiert ist.
Ich bin jedoch gespannt, wie ich diese Tests, die wirklich eine lose Variante von Integrationstests darstellen, am besten mit Maven organisieren kann. Es fühlt sich ein bisschen schmutzig an, diese Tests beizubehalten src/test/java
, aber nach dem, was ich gelesen habe, scheint es keine konsistente Strategie oder Praxis für die Organisation von Integrationstests mit Maven zu geben.
Nach dem, was ich bisher gelesen habe, kann ich das Failsafe-Plugin (oder eine zweite Instanz von Surefire) verwenden und an die integration-test
Phase binden , und ich kann auch eine benutzerdefinierte Start- oder Herunterfahrlogik (z. B. zum Starten) binden / Stoppen der HSQL-Instanz) auf pre-integration-test
oder post-integration-test
. Aber ist das wirklich die beste Methode?
Meine Frage lautet also im Grunde: Was ist die allgemein anerkannte Best Practice, um dies mit Maven zu organisieren? Ich habe Probleme, eine konsistente Antwort in der Dokumentation zu finden.
Was ich möchte ist:
- Trennen Sie Unit-Tests von Integrationstests, sodass während der
test
Phase nur Unit-Tests ausgeführt werden - Die Möglichkeit, benutzerdefinierte Start- / Herunterfahrlogik an
pre-integration-test
und zu bindenpost-integration-test
- Lassen Sie die Berichte aus den Integrationstests mit den Unitfire-Surefire-Berichten zusammenführen / präsentieren