검사할 규칙
- 길이가 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글자 미만이고 나머지 조건은 충족하는 경우
- 세 번째 테스트 - 숫자를 포함하지 않고 나머지 조건은 충족하는 경우
- 네 번째 테스트 - 값이 없는 경우
- 다섯 번째 테스트 - 대문자를 포함하지 않고 나머지 조건을 충족하는 경우
- 여섯 번째 테스트 - 숫자 포함 조건만 충족하는 경우
- 일곱 번째 테스트 - 숫자 포함 조건만 충족하는 경우
- 여덟 번째 테스트 - 대문자 포함 조건만 충족하는 경우
- 아홉 번째 테스트 - 아무 조건도 충족하지 않는 경우
※ 테스트 하는 도중에 지속적으로 코드 정리(리팩토링)도 필요하다.
- 테스트 성공 후 리펙토링할 대상이 보이면 ▷ 리팩토링
- 테스트 성공 후 리펙토링할 대상이 안보이면 ▷ 다음 테스트 진행
※ 리팩토링시 가독성을 높이는 것이 목표
- 처음보는 개발자도 알 수 있게 수정
- 전반적인 로직을 알기 쉽게 수정
'TDD > 테스트 주도 개발 시작하기' 카테고리의 다른 글
[ TDD ][책] 4장 TDD 기능명세 설계 (0) | 2024.10.11 |
---|---|
[TDD][책] 10. 테스트 코드와 유지보수 : 좋은 테스트 코드 란? (0) | 2024.10.10 |
[ TDD ] [책] 테스트 코드 작성 순서 (0) | 2024.10.03 |
[ TDD ] JUnit5 - TDD 시작 (0) | 2024.09.27 |
[ TDD ] JUnit5 - 인텔리J에서 JUnit 설정 (0) | 2024.09.26 |