Spring profiles and testing Spring profiles and testing java java

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.