Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
giuseppe-trisciuoglio avatar

Unit Test Parameterized

  • 1.7k installs
  • 311 repo stars
  • Updated June 22, 2026
  • giuseppe-trisciuoglio/developer-kit

JUnit 5 parameterized testing framework that runs single test method with multiple input values from data sources (@ValueSource, @CsvSource, @MethodSource, @EnumSource, @ArgumentsSource) to reduce duplication and test co

About

Provides parameterized testing patterns for JUnit 5 in Java, covering @ParameterizedTest, @ValueSource, @CsvSource, @MethodSource, @EnumSource, and @ArgumentsSource. Developers use this to reduce test duplication by running identical test logic with multiple input combinations, boundary values, and edge cases. Key workflows include setting up dependencies (junit-jupiter-params), choosing appropriate data sources (simple values, tabular CSV, complex objects), matching test method parameters to source types, configuring readable display names, and validating execution across all parameter combinations.

  • Supports multiple data sources: @ValueSource for primitives/strings, @CsvSource for tabular data, @MethodSource for comp
  • Each parameter set executes as a separate test invocation with customizable display names using {0}, {1} placeholders fo
  • Built-in boundary value testing with examples covering Integer.MIN_VALUE, Integer.MAX_VALUE, zero, and edge cases
  • Factory methods for @MethodSource must be static in same test class; parameter count must match test method signature ex
  • Requires junit-jupiter dependency (includes junit-jupiter-params); compatible with Maven and Gradle build tools

Unit Test Parameterized by the numbers

  • 1,663 all-time installs (skills.sh)
  • +57 installs in the week ending Jul 28, 2026 (Skillselion tracking)
  • Ranked #434 of 2,184 Testing & QA skills by installs in the Skillselion catalog
  • Security screen: MEDIUM risk (skills.sh audit)
  • Data as of Jul 28, 2026 (Skillselion catalog sync)
At a glance

unit-test-parameterized capabilities & compatibility

Capabilities
generate @parameterizedtest methods from test da · create @methodsource factory methods returning s · transform tabular data into @csvsource annotatio · validate parameter count matches test method sig · configure readable display names with placeholde · apply boundary value analysis patterns
Use cases
testing · code review
Platforms
macOS · Windows · Linux
IDEs
intellij · jetbrains · vscode · pycharm
Runs
Runs locally
Pricing
Free
From the docs

What unit-test-parameterized says it does

Reduces test duplication by running the same test logic with multiple input values.
unit-test-parameterized.md
Test boundary values: include min, max, zero, and edge cases
unit-test-parameterized.md
npx skills add https://github.com/giuseppe-trisciuoglio/developer-kit --skill unit-test-parameterized

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs1.7k
repo stars311
Security audit3 / 3 scanners passed
Last updatedJune 22, 2026
Repositorygiuseppe-trisciuoglio/developer-kit

What it does

Write Java unit tests that run the same logic across multiple input values using JUnit 5 parameterized test annotations.

Who is it for?

Testing multiple scenarios with single method, implementing boundary value analysis, validating email/input validation, testing calculator or mathematical operations, enum handling, CSV data transformation.

Skip if: Integration tests, tests requiring complex setup/teardown, UI testing, tests with external dependencies.

When should I use this skill?

Writing Java unit tests with multiple test cases, need boundary value coverage, testing with tabular data, validating the same logic across diverse inputs.

What you get

Developers write concise, maintainable data-driven tests that automatically execute the same test logic across multiple input combinations with readable output and boundary value coverage.

  • parameterized JUnit 5 test classes

By the numbers

  • Covers 6 parameterized test annotation types: @ValueSource, @CsvSource, @MethodSource, @EnumSource, @ArgumentsSource, cu
  • Examples include boundary value testing with Integer.MIN_VALUE, Integer.MAX_VALUE, and zero
  • Each parameter set executes as a separate test invocation with independent reporting

Files

SKILL.mdMarkdownGitHub ↗

Parameterized Unit Tests with JUnit 5

Overview

Provides patterns for parameterized unit tests in Java using JUnit 5. Covers @ValueSource, @CsvSource, @MethodSource, @EnumSource, @ArgumentsSource, and custom display names. Reduces test duplication by running the same test logic with multiple input values.

When to Use

  • Writing JUnit tests with multiple input combinations
  • Implementing data-driven tests in Java
  • Running same test with different values (boundary analysis)
  • Testing multiple scenarios from single test method

Instructions

1. Add dependency: Ensure junit-jupiter-params is on test classpath (included in junit-jupiter) 2. Choose source: @ValueSource for simple values, @CsvSource for tabular data, @MethodSource for complex objects 3. Match parameters: Test method parameters must match data source types 4. Set display names: Use name = "{0}..." for readable output 5. Validate: Run ./gradlew test --info or mvn test and verify all parameter combinations execute

Examples

Maven / Gradle Dependency

JUnit 5 parameterized tests require junit-jupiter (includes params). Add assertj-core for assertions:

<!-- Maven -->
<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter</artifactId>
  <scope>test</scope>
</dependency>
// Gradle
testImplementation("org.junit.jupiter:junit-jupiter")

@ValueSource — Simple Values

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.assertj.core.api.Assertions.*;

@ParameterizedTest
@ValueSource(strings = {"hello", "world", "test"})
void shouldCapitalizeAllStrings(String input) {
  assertThat(StringUtils.capitalize(input)).isNotEmpty();
}

@ParameterizedTest
@ValueSource(ints = {1, 2, 3, 4, 5})
void shouldBePositive(int number) {
  assertThat(number).isPositive();
}

@ParameterizedTest
@ValueSource(ints = {Integer.MIN_VALUE, -1, 0, 1, Integer.MAX_VALUE})
void shouldHandleBoundaryValues(int value) {
  assertThat(Math.incrementExact(value)).isGreaterThan(value);
}

@CsvSource — Tabular Data

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

@ParameterizedTest
@CsvSource({
  "alice@example.com, true",
  "bob@gmail.com,     true",
  "invalid-email,     false",
  "user@,             false",
  "@example.com,       false"
})
void shouldValidateEmailAddresses(String email, boolean expected) {
  assertThat(UserValidator.isValidEmail(email)).isEqualTo(expected);
}

@MethodSource — Complex Data

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import java.util.stream.Stream;

@ParameterizedTest
@MethodSource("additionTestCases")
void shouldAddNumbersCorrectly(int a, int b, int expected) {
  assertThat(Calculator.add(a, b)).isEqualTo(expected);
}

static Stream<Arguments> additionTestCases() {
  return Stream.of(
    Arguments.of(1, 2, 3),
    Arguments.of(0, 0, 0),
    Arguments.of(-1, 1, 0),
    Arguments.of(100, 200, 300)
  );
}

@EnumSource — Enum Values

@ParameterizedTest
@EnumSource(Status.class)
void shouldHandleAllStatuses(Status status) {
  assertThat(status).isNotNull();
}

@ParameterizedTest
@EnumSource(value = Status.class, names = {"ACTIVE", "INACTIVE"})
void shouldHandleSpecificStatuses(Status status) {
  assertThat(status).isIn(Status.ACTIVE, Status.INACTIVE);
}

Custom Display Names

@ParameterizedTest(name = "Discount of {0}% should be calculated correctly")
@ValueSource(ints = {5, 10, 15, 20})
void shouldApplyDiscount(int discountPercent) {
  double result = DiscountCalculator.apply(100.0, discountPercent);
  assertThat(result).isEqualTo(100.0 * (1 - discountPercent / 100.0));
}

Custom ArgumentsProvider

class RangeValidatorProvider implements ArgumentsProvider {
  @Override
  public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
    return Stream.of(
      Arguments.of(0, 0, 100, true),
      Arguments.of(50, 0, 100, true),
      Arguments.of(-1, 0, 100, false),
      Arguments.of(101, 0, 100, false)
    );
  }
}

@ParameterizedTest
@ArgumentsSource(RangeValidatorProvider.class)
void shouldValidateRange(int value, int min, int max, boolean expected) {
  assertThat(RangeValidator.isInRange(value, min, max)).isEqualTo(expected);
}

Error Condition Testing

@ParameterizedTest
@ValueSource(strings = {"", " ", null})
void shouldThrowExceptionForInvalidInput(String input) {
  assertThatThrownBy(() -> Parser.parse(input))
    .isInstanceOf(IllegalArgumentException.class);
}

Best Practices

  • Use descriptive display names: name = "{0}..." for readable output
  • Test boundary values: include min, max, zero, and edge cases
  • Keep test logic focused: single assertion per parameter set
  • Use @MethodSource for complex objects, @CsvSource for tabular data
  • Organize test data logically — group related scenarios together

Constraints and Warnings

  • Parameter count must match: Number of parameters from source must match test method signature
  • `@ValueSource` limitation: Only supports primitives, strings, and enums — not objects or null directly
  • CSV escaping: Strings with commas must use single quotes in @CsvSource
  • `@MethodSource` visibility: Factory methods must be static in the same test class
  • Display name placeholders: Use {0}, {1}, etc. to reference parameters
  • Execution count: Each parameter set runs as a separate test invocation

References

Related skills

Forks & variants (1)

Unit Test Parameterized has 1 known copy in the catalog totaling 21 installs. They canonicalize to this original listing.

How it compares

Choose unit-test-parameterized over manual copy-paste tests when input matrices grow beyond a handful of cases in JUnit 5.

FAQ

What is the difference between @ValueSource and @CsvSource?

@ValueSource accepts primitives, strings, or enums for simple single-parameter tests. @CsvSource accepts comma-separated tabular data for multi-parameter tests; strings with commas require single quotes.

Must @MethodSource factory methods be static?

Yes, factory methods for @MethodSource must be static in the same test class and return Stream<Arguments>. Parameters must match test method signature exactly.

How do I make parameterized test output readable?

Use the name attribute: @ParameterizedTest(name = "Description {0}") and placeholders {0}, {1}, etc. to reference parameters in readable test output.

Is Unit Test Parameterized safe to install?

skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.