암호 레벨을 판독하는 프로그램을 만든다.
test 메서드 이름은 한글로 작성했다.(어차피 쓰고 버릴 것)
최대한 리팩토링을 하면서 수정을 해본다.
교재참고
그대로 따라하지 않고 내 방식대로 변형해서 코딩한다.
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);
}
@Test
@DisplayName("모든조건충족") //이 애노테이션을 써서 메서드를 설명할 수 있다.
void MeetsAllConditions() {
assertLevel("sdfeDEF1dfsdf",PasswordLevel.STRONG);
// assertLevel("sdf",PasswordLevel.STRONG); NORMAL
// assertLevel("sdfeDEFdfsdf",PasswordLevel.STRONG); 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 null값(){
assertLevel(null,PasswordLevel.INVAILD);
}
@Test
void 빈문자열() {
assertLevel("",PasswordLevel.INVAILD);
}
@Test
void 대문자제외_나머지_충족() {
assertLevel("sdf32dgef324",PasswordLevel.NORMAL);
}
}
public class PasswordLevelCheck {
public PasswordLevel check(String pwd) {
if(pwd == null || pwd.isEmpty()) return PasswordLevel.INVAILD;
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;
return false;
}
}
public enum PasswordLevel { // 열거값을 사용한다.
NORMAL, INVAILD, STRONG
}