검사할 규칙

  • 길이가 8글자 이상
  • 0부터 9사이의 숫자를 포함
  • 대문자 포함
  • 세 규칙을 모두 충족하면 암호는 강함이다.
  • 2개의 규칙을 충족하면 암호는 보통이다.
  • 1개 이하의 규칙을 충족하면 암호는 약함이다.

첫 번째 테스트: 모든 규칙을 충족하는 경우

Test 코드

package chap02;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class PasswordStrengthMeterTest {

    @Test
    void meetsAllCriteria_Then_Strong(){
        PasswordStrengthMeter meter = new PasswordStrengthMeter();
        PasswordStrength result = meter.meter("ab12!@AB");
        assertEquals(PasswordStrength.STRONG, result);
    }
}

 

암호검사기 코드

 

PasswordStrength

package chap02;

public enum PasswordStrength {
    STRONG
}

 

PasswordStrengthMeter

 

1 ) PasswordStrengthMeter 클래스를 작성하여 컴파일 에러를 먼저 해결

package chap02;

public class PasswordStrengthMeter {
    public PasswordStrength meter(String s) {
        return null;
    }
}

▶▶ 테스트 실행시 null 을 반환하므로 실패 

 

2) 테스트를 성공시키기 위해서 STRONG 을 반환하도록 수정

package chap02;

public class PasswordStrengthMeter {
    public PasswordStrength meter(String s) {
        return PasswordStrength.STRONG;
    }
}

 

▶▶ 테스트 성공

 

3) 테스트 코드에 모든 규칙을 충족하는 예를 하나 더 추가

package chap02;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class PasswordStrengthMeterTest {

    @Test
    void meetsAllCriteria_Then_Strong(){
        PasswordStrengthMeter meter = new PasswordStrengthMeter();
        PasswordStrength result = meter.meter("ab12!@AB");
        assertEquals(PasswordStrength.STRONG, result);

        PasswordStrength result2 = meter.meter("abc1!ABD");
        assertEquals(PasswordStrength.STRONG, result2);
    }
}

▶▶ 테스트 성공

 

위와 같은 방식을 따라

아래와 같이 (가능한 모든)조건을 추가해가면서

즉, 검증하는 범위를 추가해가면서 코드를 완성하면 된다.

  • 두 번째 테스트 - 길이만 8글자 미만이고 나머지 조건은 충족하는 경우
  • 세 번째 테스트 - 숫자를 포함하지 않고 나머지 조건은 충족하는 경우
  • 네 번째 테스트 - 값이 없는 경우
  • 다섯 번째 테스트 - 대문자를 포함하지 않고 나머지 조건을 충족하는 경우
  • 여섯 번째 테스트 - 숫자 포함 조건만 충족하는 경우
  • 일곱 번째 테스트 - 숫자 포함 조건만 충족하는 경우
  • 여덟 번째 테스트 - 대문자 포함 조건만 충족하는 경우
  • 아홉 번째 테스트 - 아무 조건도 충족하지 않는 경우

※ 테스트 하는 도중에 지속적으로 코드 정리(리팩토링)도 필요하다.

  • 테스트 성공 후 리펙토링할 대상이 보이면리팩토링
  • 테스트 성공 후 리펙토링할 대상이 안보이면 ▷ 다음 테스트 진행

리팩토링시 가독성을 높이는 것이 목표

  • 처음보는 개발자도 알 수 있게 수정
  • 전반적인 로직을 알기 쉽게 수정

+ Recent posts