Spring-Boot verwendet Spring-Profile ( http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html ), die beispielsweise eine separate Konfiguration für verschiedene Umgebungen ermöglichen. Eine Möglichkeit, diese Funktion zu verwenden, besteht darin, die Testdatenbank für Integrationstests zu konfigurieren. Ich frage mich jedoch, ob es notwendig ist, mein eigenes Profil 'test' zu erstellen und dieses Profil in jeder Testdatei explizit zu aktivieren. Im Moment mache ich das folgendermaßen:
- Erstellen Sie application-test.properties in src / main / resources
- Schreiben Sie dort eine testspezifische Konfiguration (vorerst nur den Datenbanknamen)
In jeder Testdatei sind enthalten:
@ActiveProfiles("test")
Gibt es einen intelligenteren / prägnanteren Weg? Zum Beispiel ein Standardtestprofil?
Edit 1: Diese Frage bezieht sich auf Spring-Boot 1.4.1
quelle
Eine andere Möglichkeit, dies zu tun, besteht darin, eine (abstrakte) Basistestklasse zu definieren, die Ihre tatsächlichen Testklassen erweitern:
Konkrete Prüfung:
Auf diese Weise können Sie mehr als nur die
@ActiveProfiles
Anmerkung extrahieren . Sie können sich auch spezialisiertere Basisklassen für verschiedene Arten von Integrationstests vorstellen, z. B. Datenzugriffsschicht oder Serviceschicht oder für funktionale Besonderheiten (allgemein@Before
oder@After
Methoden usw.).quelle
Sie können eine application.properties-Datei in Ihrem Ordner test / resources ablegen. Dort setzen Sie
Dies ist eine Art Standardtestprofil beim Ausführen von Tests.
quelle
src/test/resources/application.properties
Datei erstelle , wird dersrc/main/resources/application.properties
Inhalt beim Ausführen von Tests ignoriert.application-test.properties
für Tests hinzufügen und nur die Eigenschaften überschreiben, die Sie benötigen.spring.profiles.active=test
wie in der Antwort angegeben angegeben sind.Ein delarativer Weg, dies zu tun (in der Tat eine kleine Woche zu @ Compitos ursprünglicher Antwort):
spring.profiles.active=test
eintest/resources/application-default.properties
.test/resources/application-test.properties
für Tests hinzu und überschreiben Sie nur die Eigenschaften, die Sie benötigen.quelle
application.properties
im Klassenpfad ebenfalls analysiert wird,test/resources/application-default.properties
und dann, da das Profil "Test" erkannt wird, wird dietest/resources/application-test.properties
Analyse analysiert? Andernfalls würde das Problem von @ ciastek nicht gelöst, wie unter @ Compitos Antwort kommentiert .Wenn Sie maven verwenden, können Sie dies in pom.xml hinzufügen:
Dann sollte maven Ihre Integrationstests (* IT.java) mit diesem Argument ausführen, und auch IntelliJ wird mit aktiviertem Profil beginnen, sodass Sie alle darin enthaltenen Eigenschaften angeben können
und Sie sollten keine "-default" -Eigenschaften benötigen.
quelle
In meinem Fall habe ich je nach Umgebung unterschiedliche application.properties, etwa:
und application.properties enthält eine Eigenschaft spring.profiles.active, um die richtige Datei auszuwählen.
Für meine Integrationstests habe ich eine neue
application-test.properties
Datei erstellt.test/resources
Mit der@TestPropertySource({ "/application-test.properties" })
Anmerkung ist dies die Datei, die für die Auswahl der gewünschten application.properties verantwortlich ist, abhängig von meinen Anforderungen für diese Testsquelle
@ActiveProfiles
nicht verwenden@TestPropertySource
.Um das "Test" -Profil zu aktivieren, schreiben Sie in Ihr build.gradle:
quelle
Ein weiterer programmatischer Weg, dies zu tun:
Es funktioniert großartig.
quelle
Sie können Ihre testspezifischen Eigenschaften eingeben
src/test/resources/config/application.properties
.Die in dieser Datei definierten Eigenschaften überschreiben die
src/main/resources/application.properties
beim Testen definierten Eigenschaften .Weitere Informationen dazu, warum dies funktioniert, finden Sie in den Spring Boots-Dokumenten .
quelle
Wenn Sie zum Zeitpunkt der Erstellung durch Maven einfach das Standardprofil festlegen / verwenden möchten, übergeben Sie das Argument
-Dspring.profiles.active=test
Genau wiequelle
Fügen Sie
spring.profiles.active=tests
in Ihrer Datei application.properties, können Sie mehrere Eigenschaften Datei im Frühjahr Boot - Anwendung wie hinzufügenapplication-stage.properties
,application-prod.properties
etc. Und Sie können in Ihrer Datei application.properties geben Sie bei der Datei zu beziehen , die durch das Hinzufügenspring.profiles.active=stage
oderspring.profiles.active=prod
Sie können das Profil auch zum Zeitpunkt der Ausführung der Spring-Boot-Anwendung übergeben, indem Sie den folgenden Befehl eingeben:
java -jar
-Dspring.profiles.active=local
build/libs/turtle-rnr-0.0.1-SNAPSHOT.jar
Entsprechend dem Profilnamen wird die Eigenschaftendatei aufgenommen. Im obigen Fall wird beim Übergeben des Profils
local
dieapplication-local.properties
Datei berücksichtigtquelle