jujuwon
시크릿주주
jujuwon
전체 방문자
오늘
어제
  • 분류 전체보기 (106)
    • 🔠 프로그래밍언어 (35)
      • ☕️ Java (19)
      • 🐠 Python (15)
      • 🍠 Kotlin (1)
    • 🔙 Backend (16)
      • 🌿 Springboot (12)
      • 🐳 Docker (1)
      • ☁️ AWS (3)
    • 💼 CS (12)
      • 📶 Network (12)
    • 🕹 알고리즘 (14)
      • 📑 스터디 (2)
      • 💁🏻‍♂️ 백준 (9)
      • 👨🏼‍🔬 프로그래머스 (3)
    • 📚 Book (8)
      • 🔎 오브젝트 (4)
      • 🧪 TDD (2)
      • 📜 논문 (2)
    • 🔐 보안 (7)
      • 👾 Pwnable (7)
    • 📝 회고 (4)
    • 🧩 etc. (10)
      • ⚠️ issue (2)
      • 💡 꿀팁 (7)
      • ✏️ 끄적 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

hELLO · Designed By 정상우.
jujuwon

시크릿주주

JUnit :: ParameterizedTest 로 경계값 테스트하기
🔙 Backend/🌿 Springboot

JUnit :: ParameterizedTest 로 경계값 테스트하기

2022. 9. 10. 16:38
반응형
  • 경계값에서 장애가 많이 일어난다
  • 테스트할 때는 input 값의 경계값에 대해서 항상 테스트를 진행해야 한다
  • 그러기 위해 ParameterizedTest 를 이용하면 여러 데이터 소스를 사용할 수 있다.

build.gradle 수정


junit-jupiter-params 추가

testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.2'
  • 자세한 내용은 아래 링크 참조
  • https://www.petrikainulainen.net/programming/testing/junit-5-tutorial-writing-parameterized-tests/

 

실습


비밀번호 입력 값 검증 테스트

  • 요구사항
    • 비밀번호는 최소 8자 이상 12자 이하여야 한다.
    • 비밀번호가 8자 미만 또는 12자 초과인 경우 IllegalArgumentException 예외를 발생시킨다.
    • 경계조건에 대해 테스트 코드를 작성해야 한다.

메인 코드

public class PasswordValidator {

    private static final String WRONG_PASSWORD_LENGTH_EXCEPTION_MESSAGE = "비밀번호는 최소 8자 이상, 12자 이하여야 한다.";

    public static void validate(String password) {
        int length = password.length();

        if (length < 8 || length > 12) {
            throw new IllegalArgumentException(WRONG_PASSWORD_LENGTH_EXCEPTION_MESSAGE);
        }
    }
}

테스트 코드

public class PasswordValidatorTest {

    @DisplayName("비밀번호가 최소 8자 이상, 12자 이하면 예외가 발생하지 않는다.")
    @Test
    void validatePasswordTest() {
        assertThatCode(() -> PasswordValidator.validate("serverwizard"))
            .doesNotThrowAnyException();
    }

    @DisplayName("비밀번호가 8자 미만 또는 12자 초과하는 경우 IllegalArgumentException 예외가 발생한다.")
    @ParameterizedTest
    @ValueSource(strings = {"aabbccd", "aabbccddeeffg"})
    void validatePasswordTestParams(String password) {

        assertThatCode(() -> PasswordValidator.validate(password))
            .isInstanceOf(IllegalArgumentException.class)
            .hasMessage("비밀번호는 최소 8자 이상, 12자 이하여야 한다.");
    }
}

@ParameterizedTest 어노테이션을 붙인 뒤

@ValueSource 안에 Test parameter 로 넘기고 싶은 값들을 정의한다.

위 예제에서는 비밀번호가 8자 이상, 12자 이하여야 한다는 요구사항이 있기 때문에

그 경계값인 7자, 13자일 때 IllegalArgumentException 이 터지는지 확인한다.

 

 

테스트 성공 !

결론 : Test 코드를 짤 때는 항상 경계값에 대해 검사하는 습관을 들이자.

728x90
반응형
저작자표시 (새창열림)
    '🔙 Backend/🌿 Springboot' 카테고리의 다른 글
    • Spring Boot :: @FeignClient 로 외부 REST API 간편 호출
    • JPA :: 벌크성 수정 쿼리
    • JPA :: 페이징과 정렬
    • JPA :: Query Method 기능
    jujuwon
    jujuwon

    티스토리툴바