I'm writing a little Maven application in Eclipse. I store some property files and my application context in the directory src/main/resources.
I now want to make Eclipse use properties in the directory src/test/resources. So when I run and debug the program in Eclipse, these test properties should be used.
Do you know how I could make that happen?
Whether you use the Maven Eclipse Plugin or m2eclipse, src/test/resources
precedes src/main/resources
on the classpath (more precisely, their output directories). In other words, there is nothing to do, things just works as on the command line.
Use a test override (e.g. testOverrides.xml):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- this file need to be imported before other contexts to ensure the test properties take effect -->
<context:property-placeholder location="classpath*:META-INF/spring/testproperties/*.properties"/>
</beans>
In your tests, make sure it's imported first:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:META-INF/spring/testOverrides.xml","classpath*:META-INF/spring/applicationContext.xml"})
public class SomeTest { ... }
Now put all your test properties in src/test/resources/META-INF/spring/testproperties/
.
You have to also make sure that the main
placeholder configurer doesn't ever see testproperties
, e.g. here's mine:
<context:property-placeholder location="classpath*:META-INF/spring/*.properties"/>
It doesn't use the double-* wildcard, so will only look at that one directory.
I use the above method with great success.