Test Driven Development
테스트 주도 개발
작성방법에 들어가기에 앞서, TDD 에 관련되어 잠깐 짚고넘어가겠다.
TDD 는 나 뿐만 아니라 여러 개발자가 가장 중요시하게 여기는 개발 방법 중 하나이다.
TDD 란,
개발 프로세스에서 테스트 코드를 먼저 작성한 뒤 그에 대응하는 코드를 작성하는 방법을 말한다.
이러한 작성방법을 사용하면 코드를 실행했을 때 발생하는 버그의 위치를 빠르게 찾을 수 있고
코드간에 결합도가 줄어들며 그에 따라 유지 보수성 향상 및 프로젝트 후반에 리팩토링이 유용해지기 때문이다.
만약 새로운 기능을 개발하고 있다면 반드시 TestCode 를 먼저 작성한 뒤 프로젝트에 적용시키는걸 권장
Repository Test 코드의 작성 Sequence는 다음과 같다.
예시를 쉽게 이해하기 위해 "책을 저장하는 과정" 을 예로 들겠다.
Book Entity 설계 및 작성 (테스트를 위해 @Setter @ToString Annotation 적용)
JpaRepository를 상속받는 bookRepository.interface를 작성
Repository.interface에 Entity 속성을 인자로 준 뒤 Test.class 작성
IntelliJ 사용자라면 Test Code를 작성하려는 파일에 커서를 둔 뒤
ctrl + shift + t 를 누르면 해당 파일에 있는 모든 메서드를 포함한 테스트 클래스 파일을 간단히 작성할 수 있다.
생성된 테스트 최상위 클래스에 @SpringBootTest Annotation을 붙여준다
테스트하려는 메서드에 @Test 어노테이션을 붙인다.
테스트 메서드에 따로 이름을 붙이고 싶다면 @DisplayName 어노테이션을 붙인 뒤 이름을 명시한다
메서드 안에 Book Entity 의 객체를 선언
Entity 속성을 set으로 바인딩
.toString으로 객체 표기
@SpringBootTest
class RootClass {
@Test
@DisplayName("책 저장 테스트")
public void createBookTest() {
Book book = new Book();
book.setBookName("테스트 상품");
book.setItemDetail("테스트 상품 상세");
book.setPrice(10000);
book.setStockNumber(100);
book.setRegTime(LocalDateTime.now());
book.setUpdateTime(LocalDateTime.now());
System.out.println( book.toString );
}
}
위 코드를 실행하면 다음과 같은 Run 결과를 얻을 수 잇다.
Book
(id=1,
bookNm=테스트 상품,
price=10000,
stockNumber=100,
itemDetail=테스트 상품 상세,
regTime=2023-05-02T18:37:13.153221400,
updateTime=2023-05-02T18:37:13.153221400
)
Run 결과에 set 하지도 않은 id가 나오는 이유는
Entity에서 @Id를 설정할 때 @GeneratedValue(strategy = GerationType.Auto)로 선언하여
객체가 생성될 때 자동으로 id값이 매핑되기 때문이다.
이런 식으로 개발한 TestCode를 그대로 Servcie영역에 구현한다면 TDD 방식으로 개발한 것이다.
만일 테스트코드 없이 개발을 진행하다가 버그가 발생했다면
수많은 코드 중 어느 영역에서 오류가 났는지 발견하기 쉽지 않을 것이다.
하지만 위 처럼 특정 영역만을 수행하는 테스트 코드를 실행했을 때
버그가 발생했다면 바로 버그가 발생한 부분을 찾을 수 있다.
그러니 나 처럼 버그를 찾는데에 시간이 오래걸리는 주니어 개발자라면
더욱 더 TDD방식을 채택하는것을 추천한다.