JUnit Platform Suite provides declarative test suite framework with annotations for creating and configuring comprehensive test suites on the JUnit 5 platform.
npx @tessl/cli install tessl/maven-org-junit-platform--junit-platform-suite@1.12.0JUnit Platform Suite provides a comprehensive framework for creating declarative test suites on the JUnit 5 platform. It enables developers to compose sophisticated test suites using annotations for test selection, filtering, configuration, and lifecycle management with powerful and flexible control over test discovery and execution.
org.junit.platform.suite (aggregates org.junit.platform.suite.api and org.junit.platform.suite.engine)import org.junit.platform.suite.api.Suite;
import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.SelectPackages;For specific capabilities:
// Configuration annotations
import org.junit.platform.suite.api.ConfigurationParameter;
import org.junit.platform.suite.api.BeforeSuite;
import org.junit.platform.suite.api.AfterSuite;
// Selection annotations
import org.junit.platform.suite.api.SelectMethod;
import org.junit.platform.suite.api.SelectFiles;
import org.junit.platform.suite.api.SelectDirectories;
// Filter annotations
import org.junit.platform.suite.api.IncludeClassNamePatterns;
import org.junit.platform.suite.api.ExcludeClassNamePatterns;
import org.junit.platform.suite.api.IncludeTags;
import org.junit.platform.suite.api.ExcludeTags;import org.junit.platform.suite.api.*;
// Basic test suite with class selection
@Suite
@SelectClasses({UserTest.class, ProductTest.class, OrderTest.class})
class BasicSuite {
}
// Package-based suite with filtering
@Suite
@SelectPackages("com.example.integration")
@IncludeClassNamePatterns(".*IntegrationTest")
@ExcludeTags("slow")
class IntegrationSuite {
}
// Configuration with lifecycle
@Suite
@SelectPackages("com.example")
@ConfigurationParameter(key = "junit.jupiter.execution.parallel.enabled", value = "true")
@SuiteDisplayName("Parallel Test Suite")
class ParallelSuite {
@BeforeSuite
static void setupSuite() {
// Suite initialization
System.setProperty("test.environment", "suite");
}
@AfterSuite
static void cleanupSuite() {
// Suite cleanup
System.clearProperty("test.environment");
}
}JUnit Platform Suite is built around several key architectural components:
@Suite annotation marks classes as declarative test suites@Select* annotations specify which tests to include using classes, packages, methods, files, URIs, modules, or directories@Include* and @Exclude* annotations provide fine-grained control over test inclusion using class name patterns, packages, tags, and engines@ConfigurationParameter and @ConfigurationParametersResource annotations manage suite-specific configuration@BeforeSuite and @AfterSuite annotations provide suite-level setup and teardown capabilitiesSuiteTestEngine integrates with JUnit Platform launcher for executionThe framework supports both explicit selection (selecting specific classes/methods) and discovery-based selection (selecting packages with filters), enabling flexible test organization and execution strategies.
Primary @Suite annotation and suite configuration for declaring and configuring test suites with display names and failure policies.
@Suite
public @interface Suite {
boolean failIfNoTests() default true;
}
@SuiteDisplayName
public @interface SuiteDisplayName {
String value();
}Comprehensive test selection capabilities including classes, packages, methods, files, directories, URIs, modules, and classpath resources with flexible selector parsing.
@SelectClasses
public @interface SelectClasses {
Class<?>[] value() default {};
String[] names() default {};
}
@SelectPackages
public @interface SelectPackages {
String[] value();
}
@SelectMethod
public @interface SelectMethod {
String value() default "";
Class<?> type() default Class.class;
String typeName() default "";
String name() default "";
Class<?>[] parameterTypes() default {};
String parameterTypeNames() default "";
}Powerful filtering system for including and excluding tests based on class name patterns, packages, tags, and test engines with regex pattern matching and tag expressions.
@IncludeClassNamePatterns
public @interface IncludeClassNamePatterns {
String[] value() default "^(Test.*|.+[.$]Test.*|.*Tests?)$";
}
@ExcludeClassNamePatterns
public @interface ExcludeClassNamePatterns {
String[] value();
}
@IncludeTags
public @interface IncludeTags {
String[] value();
}
@ExcludeTags
public @interface ExcludeTags {
String[] value();
}Suite configuration management through parameters and properties files, plus lifecycle hooks for suite setup and teardown operations.
@ConfigurationParameter
public @interface ConfigurationParameter {
String key();
String value();
}
@BeforeSuite
public @interface BeforeSuite {
}
@AfterSuite
public @interface AfterSuite {
}
@DisableParentConfigurationParameters
public @interface DisableParentConfigurationParameters {
}