Legen Sie Eigenschaften für System-oder Umgebungsvariablen Vor Eigentum Platzhalter mit SpringJunit4ClassRunner
Ich habe einen main app-context.xml definiert eine Eigenschaft Platzhalter mit zwei Standorten: Standard-properties-Datei und einer optionalen override-Datei:
<context:property-placeholder
location="classpath:config.properties,${configOverride}"
ignore-resource-not-found="true" />
Den optionalen override-Position erlaubt die Angabe weiterer Eigenschaften der Datei (z.B. "-DconfigOverride=file:/home/app/config.Eigenschaften") nur mit den Eigenschaften, sollten außer Kraft gesetzt werden.
Für meine unit-tests, bin ich mit einer test-Kontext, dass die Einfuhren app-context.xml:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:test-context.xml"})
public class UserServiceTest {
...
}
Wie kann ich einstellen, system Eigenschaften oder von environment-Variablen innerhalb der Anwendung vor der Anwendung den Kontext geladen ist? Ich möchte den gleichen Effekt erzielen, wie die Einstellung "-DconfigOverride=classpath:testConfig.Eigenschaften" über alle test-Klassen ohne Angabe von Kommandozeilen-arg, wenn möglich.
InformationsquelleAutor andy | 2012-05-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Denken ,
SpringJUnit4ClassRunner
und Einstellung der system-propertyconfigOverride
in seinem Konstruktor/Initialisierung blockExtendedSpringJUnit4ClassRunner
zu@RunWith
InformationsquelleAutor Ahamed Mustafa M
Eine andere alternative ist die Einstellung der Umgebung-Eigenschaft in eine mit @BeforeClass annotierte Methode, die aufgerufen werden, bevor die Kontext-Konfiguration passiert.
System.clearProperty("configOverride")
in einem@AfterClass
Sorry für die verspätete Antwort. Dies würde auf jeden Fall auch funktionieren. Ich war in der Hoffnung zu halten, der nur hart-codierte Zeichenfolge, die in der test-Klasse als spring-Kontext Weg, aber manchmal ist es nicht möglich.
InformationsquelleAutor kevin
Hier ist, was ich am Ende tun - ich habe nicht zu ändern, unit-test-Klassen. Leider, ich habe nicht den "configOverride" - Eigenschaft (siehe AhamedMustafaM Antwort für einen Weg, das zu tun) und ging stattdessen mit überschreiben der ursprünglichen Eigenschaft Platzhalter-definition - (ich wollte mal wieder nach meinen ersten gescheiterten versuchen es geschafft habe).
Fügte ich folgende Zeile in meine testContext.xml:
Beachten Sie die Reihenfolge="-999" - Attribut, das verwendet wird, um sicherzustellen, Priorität über die ursprüngliche Immobilien-Platzhalter-definition(en). Auch ich "ignorieren-Regional" auf "true" zu delegieren unauflöslicher Eigenschaften, um den ursprünglichen Platzhalter configurer.
InformationsquelleAutor andy
Mein Problem war ähnlich, aber ich wollte, um die
spring.profiles.active
Umgebungsvariable und es stellte sich heraus, dass ich nur benötigt, um werfen@ActiveProfiles()
mit den Werten wollte ich auf den test selbst.InformationsquelleAutor ArtB