목표
- 요구사항에 맞춰 유효성 검증
- 검증 후 코드 리팩터링
- 테스트 코드 작성하는 이유 생각하기
public class PasswordValidatorTest {
@DisplayName("비밀번호가 최소 8자 이상, 12자 이하면 예외가 발생하지 않는다.")
@Test
void validatePasswordTest() {
// PasswordValidator 클래스를 src -> main 폴더에 동일하게 생성
// PasswordValidator 에 validate 메서드 작성
assertThatCode(() -> PasswordValidator.validate("serverwizard"))
.doesNotThrowAnyException();
}
@DisplayName("비밀번호가 8자 미만 또는 12자 초과하는 경우 IllegalArgumentException 예외가 발생한다.")
@ParameterizedTest
@ValueSource(strings = {"aabbcce", "aabbccddeeffg"}) // 경계값에서 오류여부 확인을 위해 작성
void validatePasswordTest2(String password) {
assertThatCode(() -> PasswordValidator.validate(password))
.isInstanceOf(IllegalArgumentException.class)
.hasMessage("비밀번호는 최소 8자 이상 12자 이하여야 한다.");
}
}
public class PasswordValidator {
public static final String WRONG_PASSWORD_LENGTH_EXCEPTION_MESSAGE = "비밀번호는 최소 8자 이상 12자 이하여야 한다.";
public static void validate(String password) {
// if(password.length() < 8 || password.length() > 12) {
// 위 코드를 아래코드와 같이 리팩토링을 함.
// 테스트 코드이기 때문에 리팩토링이 자유로움.
int length = password.length();
if(length < 8 || length > 12) {
throw new IllegalArgumentException(WRONG_PASSWORD_LENGTH_EXCEPTION_MESSAGE);
}
}
}
장점
1. 테스트 코드이기 때문에 여러번 수정하는 게 부담스럽지 않아서 더 좋은 코드를 작성하기 위해 계속 고민하게 되었습니다.
2. 작성한 코드를 검증하는 과정을 거치기 때문에 버그를 방지할 수 있습니다.
3. 그 과정에서 작성한 코드의 품질이 향상된다는 생각이 들었고, 자연스럽게 리팩터링을 하게 되어서 이런 장점이 있기 때문에 테스트 코드를 작성한다고 느꼈습니다!
단점
1. 테스트 코드로 검증하는 과정을 거쳤기 때문에 개발 시간이 길어졌습니다.
2. 회사에서 테스트 코드를 작성한다고 생각한다면 개발 기간이 늘어나기 때문에 발생하는 비용이 늘어날 수 있겠다는 생각이 들었습니다.