Implement a custom ArgumentsProvider and reference it via @ArgumentsSource on a @ParameterizedTest.
ArgumentsProvider
@ArgumentsSource
@ParameterizedTest
package com.logicbig.example; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsSource; import org.junit.jupiter.params.provider.ArgumentsProvider; import org.junit.jupiter.api.extension.ExtensionContext; import java.util.stream.Stream; import static org.junit.jupiter.api.Assertions.assertTrue; public class ParameterizedArgumentsProviderTest { static class PalindromeArgumentsProvider implements ArgumentsProvider { @Override public Stream<? extends Arguments> provideArguments(ExtensionContext context) { return Stream.of("madam", "racecar", "level").map(Arguments::of); } } @ParameterizedTest(name = "#{index} custom provider arg={0}") @ArgumentsSource(PalindromeArgumentsProvider.class) void usingCustomArgumentsProvider(String input) { assertTrue(new StringBuilder(input).reverse().toString().equals(input)); } }
mvn test -Dtest=ParameterizedArgumentsProviderTest
D:\example-projects\junit-5\junit-5-parameterized-tests\junit-5-parameterized-argumentsprovider>mvn test -Dtest=ParameterizedArgumentsProviderTest[INFO] Scanning for projects...[INFO] [INFO] ----< com.logicbig.example:junit-5-parameterized-argumentsprovider >----[INFO] Building junit-5-parameterized-argumentsprovider 1.0-SNAPSHOT[INFO] from pom.xml[INFO] --------------------------------[ jar ]---------------------------------[INFO] [INFO] --- resources:3.3.1:resources (default-resources) @ junit-5-parameterized-argumentsprovider ---[INFO] skip non existing resourceDirectory D:\example-projects\junit-5\junit-5-parameterized-tests\junit-5-parameterized-argumentsprovider\src\main\resources[INFO] [INFO] --- compiler:3.14.1:compile (default-compile) @ junit-5-parameterized-argumentsprovider ---[INFO] No sources to compile[INFO] [INFO] --- resources:3.3.1:testResources (default-testResources) @ junit-5-parameterized-argumentsprovider ---[INFO] skip non existing resourceDirectory D:\example-projects\junit-5\junit-5-parameterized-tests\junit-5-parameterized-argumentsprovider\src\test\resources[INFO] [INFO] --- compiler:3.14.1:testCompile (default-testCompile) @ junit-5-parameterized-argumentsprovider ---[INFO] Recompiling the module because of changed source code.[INFO] Compiling 1 source file with javac [debug target 25] to target\test-classes[INFO] /D:/LogicBig/example-projects/junit-5/junit-5-parameterized-tests/junit-5-parameterized-argumentsprovider/src/test/java/com/logicbig/example/ParameterizedArgumentsProviderTest.java: D:\example-projects\junit-5\junit-5-parameterized-tests\junit-5-parameterized-argumentsprovider\src\test\java\com\logicbig\example\ParameterizedArgumentsProviderTest.java uses or overrides a deprecated API.[INFO] /D:/LogicBig/example-projects/junit-5/junit-5-parameterized-tests/junit-5-parameterized-argumentsprovider/src/test/java/com/logicbig/example/ParameterizedArgumentsProviderTest.java: Recompile with -Xlint:deprecation for details.[INFO] [INFO] --- surefire:3.5.0:test (default-test) @ junit-5-parameterized-argumentsprovider ---[INFO] Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider[INFO] [INFO] -------------------------------------------------------[INFO] T E S T S[INFO] -------------------------------------------------------[INFO] +--com.logicbig.example.ParameterizedArgumentsProviderTest - 0.125 ss[INFO] | +-- [OK] usingCustomArgumentsProvider(String) #1 custom provider arg="madam" - 0.043 ss[INFO] | +-- [OK] usingCustomArgumentsProvider(String) #2 custom provider arg="racecar" - 0.002 ss[INFO] | '-- [OK] usingCustomArgumentsProvider(String) #3 custom provider arg="level" - 0.002 ss[INFO] [INFO] Results:[INFO] [INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0[INFO] [INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 3.671 s[INFO] Finished at: 2025-12-04T14:58:08+08:00[INFO] ------------------------------------------------------------------------
Dependencies and Technologies Used:
Version compatibilities of junit-jupiter-engine with this example:
Versions in green have been tested.