Spring profiles and testing
Can I recommend doing it this way, define your test like this:
@RunWith(SpringJUnit4ClassRunner.class)@TestExecutionListeners({ TestPreperationExecutionListener.class })@Transactional@ActiveProfiles(profiles = "localtest")@ContextConfigurationpublic class TestContext { @Test public void testContext(){ } @Configuration @PropertySource("classpath:/myprops.properties") @ImportResource({"classpath:context.xml" }) public static class MyContextConfiguration{ }}
with the following content in myprops.properties file:
spring.profiles.active=localtest
With this your second properties file should get resolved:
META-INF/spring/config_${spring.profiles.active}.properties
Looking at Biju's answer I found a working solution.
I created an extra context-file test-context.xml
:
<context:property-placeholder location="classpath:config/spring-test.properties"/>
Containing the profile:
spring.profiles.active=localtest
And loading the test with:
@RunWith(SpringJUnit4ClassRunner.class)@TestExecutionListeners({ TestPreperationExecutionListener.class })@Transactional@ActiveProfiles(profiles = "localtest")@ContextConfiguration(locations = { "classpath:config/test-context.xml" })public class TestContext { @Test public void testContext(){ }}
This saves some work when creating multiple test-cases.
public class LoginTest extends BaseTest { @Test public void exampleTest( ){ // Test }}
Inherits from a base test class (this example is testng
rather than jUnit
, but the ActiveProfiles
is the same):
@ContextConfiguration(locations = { "classpath:spring-test-config.xml" })@ActiveProfiles(resolver = MyActiveProfileResolver.class)public class BaseTest extends AbstractTestNGSpringContextTests { }
MyActiveProfileResolver
can contain any logic required to determine which profile to use:
public class MyActiveProfileResolver implements ActiveProfilesResolver { @Override public String[] resolve(Class<?> aClass) { // This can contain any custom logic to determine which profiles to use return new String[] { "exampleProfile" }; }}
This sets the profile which is then used to resolve dependencies required by the test.