Java

TDD 시작하기

codingtori 2025. 9. 9. 12:42

나는 IntelliJMaven을 이용해서 할 예정이다...!

일단 먼저 JUnit 설정을 해야하는데,

 

프로젝트 하나를 새로 생성해주고, JUnit5 라이브러리를 추가해주면 된다.

라이브러리 추가의 경우,

[File] [Project Structrue ...] 메뉴를 통해서 생성해주면 된다

 

org.juni.jupiter:junit-jupiter:5.5.0 을 입력하라고 하는데, 이렇게 하면 Found:0 으로 검색이 안된다....

따라서, 아래와 같이 검색해주어야 한다.

 

그리고 클래스를 추가해서 테스트 코드를 실행하면, 잘 실행이 되는 것을 확인할 수 있다.

 

이제 메이븐 프로젝트에서 JUnit을 설정해보자.

이를 위해서 pom.xml 파일에 JUnit5를 위한 의존성을 추가해주어야 한다.


TDD : Test-Driven Development (테스트 주도 개발)

기능을 검증하는 테스트 코드를 먼저 작성하고 테스트를 통과시키기 위해 개발을 진행하는 것

 

[ example1_계산기 예제 ] 

assertEquals() : 인자로 받은 두 값이 동일한지 비교

- 사용 방법 : assertEquals(기대값, 실제값)

- 일치하지 않는 경우 : AssertionFailedError 발생

 

 

인스턴스 메소드 VS 정적 메소드

●  인스턴스 메소드

    객체를 생성해야 됨

●  정적 메소드

 

 

+) src/test/java/ 소스 폴더는 배포 대상에서 제외됨

 

테스트 → 코딩 리팩토링    :    이 과정을 계속 반복한다

 

TDD의 이점 : 코드 수정에 대한 피드백이 빠름 잘못된 코드가 배포 되는 것 방지 가능


첫 번째 테스트

- 가장 쉽거나 가장 예외적인 상황을 선택해야함

  : 모든 조건을 충족하는 경우

 

두 번째 테스트

- 패스워드 문자열의 길이가 8글자 미만, 나머지 조건은 충족 == 암호 강도: 보통

 

세 번째 테스트

- 숫자를 포함하지 않고 나머지 조건은 충족하는 암호 == 암호강도: 보통


네 번째 테스트

- 값이 없는 경우 NPE(Null Pointer Exception) 발생

  해결하기 위해서는 

  - IllegalArgumentException 발생    /   PasswordStrength.INVALID 설정

 

다섯 번째 테스트

- 대문자 포함하지 않고 나머지 조건을 충족하는 경우

 

이렇게 까지 하면 한 가지 조건만 충족하거나 모든 조건을 충족하지 않는 경우만 남음


여섯 번째 테스트

- 길이가 8글자 이상인 조건만 충족

 

일곱 번째 테스트

- 숫자 포함 조건만 만족함

 

여덟 번째 테스트

- 대문자 포함 조건만 충족

 

일일이 테스트마다 로직을 따로 if문으로 분기한다면, 코드 길이도 길어지고 가독성도 떨어짐

=> 공통적인 부분이 뭘까?? => 조건 충족 개수로 묶으면 어떨까?

 

아홉 번째 테스트

- 아무 조건도 충족하지 않은 경우

 

완성!