반응형
- 경계값에서 장애가 많이 일어난다
- 테스트할 때는 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
반응형