public class Numbers {
    public static boolean isOdd(int number) {
        return number % 2 != 0;
    }
}

여러 값을 테스트할때 사용

@ParameterizedTest
@ValueSource(ints = {1, 3, 5, -3, 15, Integer.MAX_VALUE}) // six numbers
void isOdd_ShouldReturnTrueForOddNumbers(int number) {
    assertTrue(Numbers.isOdd(number));
}
package com.qpeterp.wising.api.auth.req

import com.qpeterp.wising.api.core.ValidatorHelper
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.ValueSource

class SignUpReqTest {
    private val validationHelper = ValidatorHelper(SignUpReq::class.java)

    @ParameterizedTest
    @ValueSource(
        strings = [
            "12", // 2글자
            "1234567890123456", // 16글자 
            "가나다라", // 한글
            "가나다라123", // 한글 또는 숫자
            "가나다라123ABC" // 한글 또는 숫자 또는 영문
        ]
    )
    fun `test valid nickname parameter`(element: String) {
        validationHelper.assertNoViolation("nickname", element)
    }

    @ParameterizedTest
    @ValueSource(
        strings = [
            "1", // 1글자
            "12345678901234567", // 17글자
            "✅✅" // 한글 또는 숫자가 아닌 문자
        ]
    )
    fun `test invalid nickname parameter`(element: String) {
        validationHelper.assertHasViolation("nickname", element)
    }

    @ParameterizedTest
    @ValueSource(
        strings = [
            "abcd1234", // 8글자 이상
            "abcdabcd12345678", // 16글자 이하
        ]
    )
    fun `test valid username parameter`(element: String) {
        validationHelper.assertNoViolation("username", element)
    }

    @ParameterizedTest
    @ValueSource(
        strings = [
            "a123456", // 8글자 미만
            "a1234567890123456", // 16글자 초과
            "12345678", // 첫 글자가 영문이 아님
            "a123가나다라" // 영문 또는 숫자가 아님
        ]
    )
    fun `test invalid username parameter`(element: String) {
        validationHelper.assertHasViolation("username", element)
    }

    @ParameterizedTest
    @ValueSource(
        strings = [
            "abcd123@",
            "abCD123!",
            "abcdefghij1234567890abcdefghij123456789@" // 40자 이하
        ]
    )
    fun `test valid password parameter`(element: String) {
        validationHelper.assertNoViolation("password", element)
    }

    @ParameterizedTest
    @ValueSource(
        strings = [
            "a12@", // 8글자 미만
            "a123@!가나다", // 영문, 숫자가 아닌 문자가 포함됨
            "abcdefghij1234567890abcdefghij123456789@!" // 40자 초과
        ]
    )
    fun `test invalid password parameter`(element: String) {
        validationHelper.assertHasViolation("password", element)
    }
}

Null 및 빈 값

*@NullSource*

JUnit 5.4부터  @NullSource를 사용하여 매개변수화된 테스트 메서드에  단일 null  값을 전달할 수 있습니다 .

@ParameterizedTest
@NullSource
void isBlank_ShouldReturnTrueForNullInputs(String input) {
    assertTrue(Strings.isBlank(input));
}

@EmptySource

원시 데이터 유형은 null  값을 허용할 수 없으므로  원시 인수에 @NullSource  를 사용할 수 없습니다  .

매우 유사하게  @EmptySource  주석을 사용하여 빈 값을 전달할 수 있습니다.

@ParameterizedTest
@EmptySource
void isBlank_ShouldReturnTrueForEmptyStrings(String input) {
    assertTrue(Strings.isBlank(input));
}

@NullAndEmptySource

@ParameterizedTest
@NullAndEmptySource
void isBlank_ShouldReturnTrueForNullAndEmptyStrings(String input) {
    assertTrue(Strings.isBlank(input));
}