Ich habe eine Spring-Boot-Anwendung, in der die Standardeigenschaften in einer application.properties
Datei im Klassenpfad festgelegt sind (src / main / resources / application.properties).
Ich möchte einige Standardeinstellungen in meinem JUnit-Test mit Eigenschaften überschreiben, die in einer test.properties
Datei deklariert sind (src / test / resources / test.properties).
Normalerweise habe ich eine spezielle Konfigurationsklasse für meine Junit-Tests, z
package foo.bar.test;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
@Import(CoreConfig.class)
@EnableAutoConfiguration
public class TestConfig {
}
Ich dachte zuerst, dass die Verwendung @PropertySource("classpath:test.properties")
in der TestConfig-Klasse den Trick machen würde, aber diese Eigenschaften überschreiben die Einstellungen von application.properties nicht (siehe Spring-Boot-Referenzdokument - 23. Externalisierte Konfiguration ).
Dann habe ich versucht, -Dspring.config.location=classpath:test.properties
beim Aufrufen des Tests zu verwenden. Das war erfolgreich - aber ich möchte diese Systemeigenschaft nicht für jede Testausführung festlegen. Also habe ich es in den Code eingefügt
@Configuration
@Import(CoreConfig.class)
@EnableAutoConfiguration
public class TestConfig {
static {
System.setProperty("spring.config.location", "classpath:test.properties");
}
}
was leider wieder nicht erfolgreich war.
Es muss eine einfache Lösung geben, wie application.properties
Einstellungen in JUnit-Tests überschrieben werden können test.properties
, die ich übersehen haben muss.