Book Review/테스트 주도개발 시작하기

[테스트 주도개발 시작하기] Chapter1. TDD 시작(4): 암호 검사기

초보병일이 2023. 4. 11. 19:03
728x90

두 번째 테스트: 길이만 8글자 미만이고 나머지 조건은 충족하는 경우

두 번째 테스트 메서드를 추가하자.

이번에 테스트할 대상은 패스워드 문자열의 길이가 8글자 미만이고 나머지 조건을 충족하는 암호이다.

이 암호의 강도는 보통이어야 한다.

두 번째 테스트 코드 작성

@DisplayName("길이 8글자 미만, 나머지 조건 충족, 강도는 보통")
    @Test
    void meetsOtherCriteria_except_for_Length_Then_Normal() {
        PasswordStrengthMeter meter = new PasswordStrengthMeter();
        PasswordStrength result = meter.meter("ab12!@A");
        assertThat(PasswordStrength.NORMAL).isEqualTo(result);
    }   

enum PasswordStrength: 열거 타입 작성

PasswordStrength 열거 타입에 NORMAL이 없으므로 컴파일 에러가 발생한다.
NORMAL을 추가해서 컴파일 에러를 없앤다.

public enum PasswordStrength {
    NORMAL, STRONG
}

PasswordStrengthMeterTest 실행

컴파일 에러를 없앤 뒤 PasswordStrengthMeterTest를 실행한다.

새로 추가한 테스트가 실패했다.
새로 추가한 테스트를 통과시키는 가장 쉬운 방법은 meter() 메서드가 NORMAL을 리턴하도록 수정하는 것이다.

meter() 메서드 수정

public class PasswordStrengthMeter {
    public PasswordStrength meter(String s) {
        return PasswordStrength.NORMAL; // 두 번째 테스트만 통과하게 됨
    }
}

그런데 이렇게 수정하면 앞서 만든 테스트를 통과하지 못한다. (Strong)

두 테스트를 모두 통과시킬 수 있는 만큼 코드를 작성해 보자.

쉬운 방법은 길이가 8보다 작으면 NORMAL을 리턴하는 코드를 추가하는 것이다.

두 테스트를 통과시키기 위한 코드 추가

public class PasswordStrengthMeter {
    public PasswordStrength meter(String s) {
        if (s.length() < 8) {
            return PasswordStrength.NORMAL;
        }
        return PasswordStrength.STRONG;
    }
}

코드를 수정했으니 테스트를 실행하자.

테스트 실행


통과다!

앞서 예와 동일하게 길이가 8 미만이고 나머지 조건은 충족하는 암호에 대한 검증 코드를 추가하고 테스트를 실행해보자

검증 코드 추가

@DisplayName("길이 8글자 미만, 나머지 조건 충족, 강도는 보통")
    @Test
    void meetsOtherCriteria_except_for_Length_Then_Normal() {
        PasswordStrengthMeter meter = new PasswordStrengthMeter();
        PasswordStrength result = meter.meter("ab12!@A");
        assertThat(PasswordStrength.NORMAL).isEqualTo(result);
        PasswordStrength result2 = meter.meter("Ab12!c");
        assertThat(PasswordStrength.NORMAL).isEqualTo(result2);
    }

두 번째 테스트 완료!

 

728x90