728x90
네 번째 테스트: 값이 없는 경우
테스트 코드를 작성하는 과정에서 아주 종요한 테스트를 놓쳤다.
바로 값이 없는 경우를 테스트하지 않은 것이다.
meter() 메서드에 null을 전달하면 NullPointerException이 발생하게 된다.
null을 입력할 경우 암호 강도 측정기는 어떻게 반응해야 할까?
- IllegalArgumentException 발생한다.
- 유효하지 않은 암호를 의미하는 PasswordStrength.INVALID를 리턴한다.
두 번째 방법을 선택해보자.
네 번째 테스트 코드 작성
입력이 null인 경우에 대한 테스트 추가
@DisplayName("입력이 null인 경우")
@Test
void nullInput_Then_Invalid() {
assertStrength(null, PasswordStrength.INVALID);
}
코드를 추가했다면 PasswordStrength.INVALID에서 컴파일 에러가 발생할 것이다.
INVALID를 추가해서 컴파일 에러를 없앤다.
public enum PasswordStrength {
INVALID, NORMAL, STRONG
}
테스트를 실행하면 당연히 실패할 것이다.
테스트를 통과시키기 위한 코드 추가
public class PasswordStrengthMeter {
public PasswordStrength meter(String s) {
// 새로 추가한 부분
if (s == null) {
return PasswordStrength.INVALID;
}
//
if (s.length() < 8) {
return PasswordStrength.NORMAL;
}
boolean containsNum = meetsContainingNumberCriteria(s);
if (!containsNum) {
return PasswordStrength.NORMAL;
}
return PasswordStrength.STRONG;
}
...생략
}
구현을 추가했으니 테스트에 통과할 것이다.
예외 상황이 null만 있는 것은 아니다.
빈 문자열도 예외 상황이다. 빈 문자열에 대한 테스트도 추가한다.
@DisplayName("입력이 빈 문자열인 경우")
@Test
void emptyInput_Then_Invalid() {
assertStrength("", PasswordStrength.INVALID);
}
테스트에 실패할 것이다.
실패 결과를 보면 기대한 값 INVALID, 실제 결과 NORMAL
이 테스트를 통과시키기 위해 PasswordStrengthMeter 클래스의 코드를 수정한다.
public PasswordStrength meter(String s){
if(s==null||s.isEmpty()){
return PasswordStrength.INVALID;
}
...생략
}
테스트 완료!
728x90
'Book Review > 테스트 주도개발 시작하기' 카테고리의 다른 글
[테스트 주도개발 시작하기] Chapter1: 암호 검사기 완료 (0) | 2023.04.15 |
---|---|
[테스트 주도개발 시작하기] Chapter1. TDD 시작(5): 암호 검사기 (0) | 2023.04.15 |
[테스트 주도개발 시작하기] Chapter1. TDD 시작(4): 암호 검사기 (0) | 2023.04.11 |
[테스트 주도개발 시작하기] Chapter1. TDD 시작(3): 암호 검사기 (0) | 2023.04.07 |
[테스트 주도개발 시작하기] Chapter1. TDD 시작(2): 암호 검사기 (0) | 2023.04.04 |