1.1 PasswordLevelCheck(WEAK 추가)

choizz156·2022년 8월 12일
0

TDD

목록 보기
2/6
post-thumbnail

기존의 코드에서 WEAK(약함)의 경우를 추가했다.

TestCode

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;

public class PasswordLevelCheckTest {
    PasswordLevelCheck checker = new PasswordLevelCheck(); // 테스트 메서드 중복코드 리팩토링
    private void assertLevel(String pwd,PasswordLevel str //열거값 사용) { // 메서드를 만들어서 리팩토링
        PasswordLevel reuslt = checker.check(pwd);
        assertThat(str).isEqualTo(reuslt);
    }

    //Strong
    @Test
    @DisplayName("모든조건충족") //이 애노테이션을 써서 메서드를 설명할 수 있다.
    void MeetsAllConditions() {
        assertLevel("sdfeDEF1dfsdf",PasswordLevel.STRONG);
//        assertLevel("sdf",PasswordLevel.STRONG); NORMAL
//        assertLevel("sdfeDEFdfsdf",PasswordLevel.STRONG); NORMAL


    }

// normal
    @Test
    void 길이_12문자미만_제외_나머지_충족() {
        assertLevel("sfeDEF1f",PasswordLevel.NORMAL);
//        assertLevel("sdfeDEF1dfsdf",PasswordLevel.NORMAL); STRONG
    }
    @Test
    void 숫자제외_나머지_충족(){
        assertLevel("sdfeDEFdfsdf",PasswordLevel.NORMAL);
//        assertLevel("sdfeDEFdf2sdf",PasswordLevel.NORMAL); STRONG

    }
    @Test
    void 대문자제외_나머지_충족() {
        assertLevel("sdf32dgef324",PasswordLevel.NORMAL);
    }

    //Invalid
    @Test
    void null(){
        assertLevel(null,PasswordLevel.INVAILD);
    }

    @Test
    void 빈문자열() {
        assertLevel("",PasswordLevel.INVAILD);
    }
/* -------------------------------------------------*/
    //weak추가
    @Test
    void 길이만_충족() {
        assertLevel("asdfesdfdsdfdf", PasswordLevel.WEAK);
    }

    @Test
    void 숫자만_충족() {
        assertLevel("1112123",PasswordLevel.WEAK);
    }

    @Test
    void 대문자만_충족(){
        assertLevel("SDFESDDF",PasswordLevel.WEAK);
    }

Production Code

public class PasswordLevelCheck {
    public PasswordLevel check(String pwd) {
        if (pwd == null || pwd.isEmpty()) return PasswordLevel.INVAILD;
// weak인 경우 추가
// 코드의 위치를 바꿔서 적용 시킴.
        if (pwd.length() >= 12 && !isNumber(pwd) && !isUpper(pwd)) return PasswordLevel.WEAK; // 3가지 조건 중 하나만 적용
        if (!(pwd.length() >= 12) && isNumber(pwd) && !isUpper(pwd)) return PasswordLevel.WEAK;
        if (!(pwd.length() >= 12) && !isNumber(pwd) && isUpper(pwd)) return PasswordLevel.WEAK;

/*-------------------------------------------------------------------*/

        if (pwd.length() <= 12) return PasswordLevel.NORMAL;
        if (!isNumber(pwd)) return PasswordLevel.NORMAL;
        if (!isUpper(pwd)) return PasswordLevel.NORMAL;

        return PasswordLevel.STRONG; //모두 충족
    }

    private boolean isNumber(String pwd) { //리팩토링
        for (char num : pwd.toCharArray()) // 문자 배열로 만들기
            if (num >= '0' && num <= '9') return true;

        return false;
    }

    private boolean isUpper(String pwd) {
        for (char up : pwd.toCharArray())
            if (Character.isUpperCase(up)) return true; // 대문자 확인 방법(wrapper클래스에 있었음)

        return false;
    }
}

public enum PasswordLevel {
    NORMAL, INVAILD, WEAK, STRONG //WEAK추가
}
profile
조금씩 성장하는 개발자...!

0개의 댓글