The inheritProfiles attribute of @ActiveProfiles controls whether a child test class inherits the active profiles from its parent test class. When inheritProfiles = true (the default), child profiles are merged with parent profiles. When false, child profiles replace parent profiles entirely.
Example
Base test class and configuration
package com.logicbig.example;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
// No beans needed for this demo;
// we only assert Environment active profiles.
}
package com.logicbig.example;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.Profiles;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = AppConfig.class)
@ActiveProfiles("base")
public abstract class BaseTest {
@Autowired
protected ConfigurableEnvironment env;
protected static boolean contains(String[] arr, String v) {
for (String s : arr) {
if (s.equals(v)) return true;
}
return false;
}
}
Child tests demonstrating inheritProfiles
inheritProfiles = true (merge)
package com.logicbig.example;
import org.junit.jupiter.api.Test;
import org.springframework.core.env.Profiles;
import org.springframework.test.context.ActiveProfiles;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
@ActiveProfiles(value = "dev", inheritProfiles = true)
public class DevTest extends BaseTest {
@Test
public void test() {
// Active profiles should include both base and dev
String[] profiles = env.getActiveProfiles();
assertTrue(contains(profiles, "base"),
"'base' should be active (inherited)");
assertTrue(contains(profiles, "dev"),
"'dev' should be active (declared)");
assertFalse(contains(profiles, "prod"),
"'prod' should not be active");
// Environment-based checks (using Profiles.of)
assertTrue(env.acceptsProfiles(Profiles.of("dev")));
assertFalse(env.acceptsProfiles(Profiles.of("prod")));
assertTrue(env.acceptsProfiles(Profiles.of("dev & base")));
}
}
OutputD:\example-projects\spring-core-testing\spring-active-profiles-inherit-profiles-example>mvn test -Dtest=DevTest [INFO] Scanning for projects... [INFO] [INFO] --< com.logicbig.example:spring-active-profiles-inherit-profiles-example >-- [INFO] Building spring-active-profiles-inherit-profiles-example 1.0-SNAPSHOT [INFO] from pom.xml [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- resources:3.3.1:resources (default-resources) @ spring-active-profiles-inherit-profiles-example --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory D:\example-projects\spring-core-testing\spring-active-profiles-inherit-profiles-example\src\main\resources [INFO] [INFO] --- compiler:3.14.1:compile (default-compile) @ spring-active-profiles-inherit-profiles-example --- [INFO] No sources to compile [INFO] [INFO] --- resources:3.3.1:testResources (default-testResources) @ spring-active-profiles-inherit-profiles-example --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory D:\example-projects\spring-core-testing\spring-active-profiles-inherit-profiles-example\src\test\resources [INFO] [INFO] --- compiler:3.14.1:testCompile (default-testCompile) @ spring-active-profiles-inherit-profiles-example --- [INFO] Nothing to compile - all classes are up to date. [INFO] [INFO] --- surefire:3.2.5:test (default-test) @ spring-active-profiles-inherit-profiles-example --- [INFO] Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider [WARNING] file.encoding cannot be set as system property, use <argLine>-Dfile.encoding=...</argLine> instead [INFO] [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running com.logicbig.example.DevTest [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.408 s -- in com.logicbig.example.DevTest [INFO] [INFO] Results: [INFO] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.412 s [INFO] Finished at: 2026-01-30T23:45:03+08:00 [INFO] ------------------------------------------------------------------------
inheritProfiles = false (replace)
package com.logicbig.example;
import org.junit.jupiter.api.Test;
import org.springframework.core.env.Profiles;
import org.springframework.test.context.ActiveProfiles;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
@ActiveProfiles(value = "prod", inheritProfiles = false)
public class ProdTest extends BaseTest {
@Test
public void test() {
// Active profiles should only include prod (no inheritance)
String[] profiles = env.getActiveProfiles();
assertFalse(contains(profiles, "base"),
"'base' should NOT be active (inheritance disabled)");
assertTrue(contains(profiles, "prod"),
"'prod' should be active (declared)");
assertFalse(contains(profiles, "dev"),
"'dev' should not be active");
// Environment-based checks (using Profiles.of)
assertTrue(env.acceptsProfiles(Profiles.of("prod")));
assertFalse(env.acceptsProfiles(Profiles.of("dev")));
assertFalse(env.acceptsProfiles(Profiles.of("base")));
}
}
OutputD:\example-projects\spring-core-testing\spring-active-profiles-inherit-profiles-example>mvn test -Dtest=ProdTest [INFO] Scanning for projects... [INFO] [INFO] --< com.logicbig.example:spring-active-profiles-inherit-profiles-example >-- [INFO] Building spring-active-profiles-inherit-profiles-example 1.0-SNAPSHOT [INFO] from pom.xml [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- resources:3.3.1:resources (default-resources) @ spring-active-profiles-inherit-profiles-example --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory D:\example-projects\spring-core-testing\spring-active-profiles-inherit-profiles-example\src\main\resources [INFO] [INFO] --- compiler:3.14.1:compile (default-compile) @ spring-active-profiles-inherit-profiles-example --- [INFO] No sources to compile [INFO] [INFO] --- resources:3.3.1:testResources (default-testResources) @ spring-active-profiles-inherit-profiles-example --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory D:\example-projects\spring-core-testing\spring-active-profiles-inherit-profiles-example\src\test\resources [INFO] [INFO] --- compiler:3.14.1:testCompile (default-testCompile) @ spring-active-profiles-inherit-profiles-example --- [INFO] Recompiling the module because of changed source code. [INFO] Compiling 4 source files with javac [debug target 25] to target\test-classes [INFO] [INFO] --- surefire:3.2.5:test (default-test) @ spring-active-profiles-inherit-profiles-example --- [INFO] Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider [WARNING] file.encoding cannot be set as system property, use <argLine>-Dfile.encoding=...</argLine> instead [INFO] [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running com.logicbig.example.ProdTest [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.385 s -- in com.logicbig.example.ProdTest [INFO] [INFO] Results: [INFO] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.579 s [INFO] Finished at: 2026-01-30T23:46:26+08:00 [INFO] ------------------------------------------------------------------------
These tests also demonstrate using Environment for assertions: ConfigurableEnvironment#getActiveProfiles() and Environment#acceptsProfiles(...) with Profiles.of().
Example ProjectDependencies and Technologies Used: - spring-context 7.0.3 (Spring Context)
Version Compatibility: 5.1.0.RELEASE - 7.0.3 Version compatibilities of spring-context with this example: Versions in green have been tested.
- spring-test 7.0.3 (Spring TestContext Framework)
- junit-jupiter-engine 6.0.2 (Module "junit-jupiter-engine" of JUnit)
- JDK 25
- Maven 3.9.11
|
|