@TestPropertySource funktioniert nicht für JUnit test mit AnnotationConfigContextLoader im Frühjahr 1.2.6
Es scheint nicht, dass alles, was ich tun, im Frühjahr 4.1.17 mit Spring Boot 1.2.6.RELEASE überhaupt funktioniert. Ich will einfach nur Zugriff auf die Eigenschaften der Anwendung und überschreiben Sie Sie mit dem test, wenn notwendig (nicht über den hack zu injizieren PropertySource manuell)
dieser funktioniert nicht..
@TestPropertySource(properties = {"elastic.index=test_index"})
auch nicht dazu..
@TestPropertySource(locations = "/classpath:document.properties")
nicht so..
@PropertySource("classpath:/document.properties")
vollständigen Testfall..
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class)
@TestPropertySource(properties = {"elastic.index=test_index"})
public class PropertyTests {
@Value("${elastic.index}")
String index;
@Configuration
@TestPropertySource(properties = {"elastic.index=test_index"})
static class ContextConfiguration {
}
@Test
public void wtf() {
assertEquals("test_index", index);
}
}
was in
org.junit.ComparisonFailure:
Expected :test_index
Actual :${elastic.index}
Scheint es es gibt eine Menge von widersprüchlichen Informationen, zwischen 3.x und 4.x und ich kann nichts finden, dass wird sicher arbeiten.
Jede Einsicht wäre dankbar geschätzt. Prost!
TestPropertySource
funktioniert.- TestPropertySource nicht überschreiben Umgebungsvariablen, wie es sollte laut docs.Frühling.io/spring-boot/docs/current/Referenz/html/...
- Spring boot stellt die annotation @SpringBootTest, die verwendet werden kann zum Lesen der config yml. Bitte schauen Sie hier für details : stackoverflow.com/a/50309219/1169093
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stellt sich heraus, der beste Weg (bis zum Frühjahr behebt diese Aufsicht) ist ein
PropertySourcesPlaceholderConfigurer
bringen im test.Eigenschaften (oder was auch immer du willst) und@Import
oder erweitern, dass@Configuration
.Diese können Sie definieren, Standardwerte in Anwendung.Eigenschaften und setzen Sie im test.Eigenschaften. Natürlich, wenn Sie mehrere Systeme, dann können Sie konfigurieren Sie die
PropertyTestConfiguration
Klasse als notwendig.Und verwenden Sie diese in einem unit-test.
PropertySourcesPlaceholderConfigurer
in Ihrem Anwendungskontext, dann die@PropertySource
arbeiten.@Configuration
Klasse (Formatierung funktioniert hier nicht): public @Bean PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { return new PropertySourcesPlaceholderConfigurer(); }Benutzte ich die
locations
Eigenschaft von@TestPropertySource
zu überschreiben (oder hinzufügen) Eigenschaften.Dieser arbeitete für mich (Frühjahr 4.2.4):
Aber überschreiben von Eigenschaften wie unten nicht:
Obwohl die javadoc sagt, die diese Eigenschaften haben höchste Priorität. Ein bug vielleicht?
Update
Der Fehler soll behoben werden im Frühjahr boot-version 1.4.0 und höher. Finden Sie die commit schließt die Frage.
Durch die nun deklarierten Eigenschaften in der vorgestellten Weise sollte Vorrang bekommen.
Ihre Nutzung des @Value erfordert eine PropertySourcesPlaceholderConfigurer bean zu beheben
${...}
Platzhalter. Finden Sie die akzeptierte Antwort hier: @Wert nicht über Java-konfigurierten test-KontextFür Mich @TestPropertySource("classpath:xxxxxxxx.Eigenschaften") gearbeitet
Haben Sie versucht, mit
@PropertySource("classpath:document.properties")
oder@PropertySource("classpath*:document.properties")
?Hatte ich Problem mit @TestPropertySource. test.Eigenschaften, die nicht gefunden
unten ist die, die vor festen
habe ich entfernt, der Raum zwischen classpath: und zu testen.Eigenschaften, wie unten
Dieser arbeitete für mich, Wenn test.Eigenschaften nicht gefunden in classpth. misht Arbeit für Sie aswell