Spring Testing - Resolving active profiles programmatically by using ActiveProfilesResolver

[Updated: Jul 17, 2017, Created: Jul 17, 2017]

ActiveProfilesResolver interface can be implemented to programmatically select profiles for Spring Tests. We can register our ActiveProfilesResolver implementation with the 'resolver' attribute of @ActiveProfiles annotation. Let's see an example how to do that.

Example

Creating a simple Spring application

@Configuration
public class AppConfig {
  @Bean
  @Profile("windows")
  public MyService myServiceA() {
      return new MyServiceA();
  }

  @Bean
  @Profile("other")
  public MyService myServiceB() {
      return new MyServiceB();
  }
}
public interface MyService {
  public String doSomething();
}
public class MyServiceA implements MyService {
  @Override
  public String doSomething() {
      return "in " + this.getClass().getSimpleName();
  }
}
public class MyServiceB implements MyService {
  @Override
  public String doSomething() {
      return "in " + this.getClass().getSimpleName();
  }
}

Implementing MyActiveProfilesResolver

public class MyActiveProfilesResolver  implements ActiveProfilesResolver{
  @Override
  public String[] resolve(Class<?> testClass) {
      String os = System.getProperty("os.name");
      String profile = (os.toLowerCase().startsWith("windows")) ? "windows" : "other";
      return new String[]{profile};
  }
}

The JUnit test

Following test will fail if run other than Windows O.S.

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = AppConfig.class)
@ActiveProfiles(resolver = MyActiveProfilesResolver.class)
public class MyServiceTests {

  @Autowired
  private MyService dataService;

  @Test
  public void testDoSomething() {
      String s = dataService.doSomething();
      System.out.println(s);
      Assert.assertEquals("in MyServiceA", s);
  }
}
mvn  -q test -Dtest=MyServiceTests

Output

D:\example-projects\spring-core-testing\active-profile-resolver-example>mvn  -q test -Dtest=MyServiceTests

-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.logicbig.example.MyServiceTests
in MyServiceA
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.371 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

Example Project

Dependencies and Technologies Used :

  • spring-context 4.3.9.RELEASE: Spring Context.
  • spring-test 4.3.9.RELEASE: Spring TestContext Framework.
  • junit 4.12: JUnit is a unit testing framework for Java, created by Erich Gamma and Kent Beck.
  • JDK 1.8
  • Maven 3.3.9

Spring Test Active Profiles Resolver Example Select All Download
  • active-profile-resolver-example
    • src
      • main
        • java
          • com
            • logicbig
              • example
      • test
        • java
          • com
            • logicbig
              • example

See Also