1. 개요
이번에 회사 동기분들과 함께 Next Step에서 진행하는 ATDD, 클린 코드 with Spring 6기에 참여하게 되었다. 과정 속에서 배운 것과 정리할 내용을 남겨두고자 하는데, 아무래도 유료 강의이다 보니 많은 내용을 기재하기는 어려워서 간단하게만 가능할 것 같다.
1) ATDD vs TDD
- TDD는 단위 테스트를 기반으로, ATDD는 인수 테스트를 기반으로 코드를 작성 및 검증한다
- TDD가 "구현한 대로 동작하는가?"에 집중한다면, ATDD는 시나리오 형태의 요구사항에 집중한다
2) 인수테스트(Acceptance Test)란?
- 명세나 계약의 요구사항이 충족되는지를 확인하는 테스트
- 작업을 종료시켜도 되는지 검증하는 테스트
3) 블랙박스 테스트
- 인수테스트는 블랙박스 테스트의 성격을 가지고 있음
- 블랙박스 테스트란 내부 구현이나 기술을 검증하지 않고, 표면적으로 확인할 수 있는 요소를 검증하는 것을 의미한다
2. 1주차 리뷰
1) 피드백
테스트 격리
- 1) API 통신을 통한 E2E테스트에서 @Transactional을 사용하는 것은 불가능하다
- 2) @DirtiesContext는 매번 새로운 Context를 구성하므로 비용이 너무 크다
- 3) @Sql을 통한 쿼리 수행은 좋은 방법이지만, 테이블이 추가될 때마다 해당 쿼리 수정이 필요하다는 단점이 있다.
- 4) 코드상으로 테이블을 truncate 시키기
테스트 가독성 향상시키기
- 테스트 가독성이 좋지 않으면 테스트로써의 기능이 저하되고, 변경 사항에 대해 대응하기 어렵게 만드므로 테스트가 점점 방치된다(@Ignore나 @Disabled를 통해)
- 가독성 꿀팁1) 테스트 코드 중복 제거
- 메서드 분리, CRUD 추상화, BDD 도구 사용
- 가독성 꿀팁2) 각 step의 의도 드러내기
- 별도의 Steps 클래스를 만들어 static 메서드로 만듦으로써 다른 인수 테스트에서 재사용할 수 있다
2) PR
- https://github.com/next-step/atdd-subway-map/pull/612
- https://github.com/next-step/atdd-subway-map/pull/651
- https://github.com/next-step/atdd-subway-map/pull/696
3) 리뷰 정리
- JPA의 중요한 특성들을 잘 이해하고 사용하자
- DirtyChecking, 객체 간의 참조(관계), 부모 객체 - 자식 객체 간의 관계(Cascade 등), fetch join 등
- 메서드와 클래스명에서 의도를 명확히 하자
- 구현을 노출시키는 메서드 시그니쳐를 지양하자
- 테스트 픽스쳐 생성이나 검증문 등 반복되어 사용되는 기능은 static 메서드 등이나 별도의 Steps 클래스로 추출하자
- 일급 컬렉션 사용을 고려하라
3. 느낀 점
인수테스트 및 테스트 격리에 대해서 배웠다. 인수테스트는 실무에도 적용해서 적극적으로 사용해야겠다는 생각이 든 반면, 테스트 격리는 그 필요성은 절실히 느끼면서도 현재 회사의 개발환경상 적용하기가 상당히 까다로울 것 같았다. 좀 더 다양한 방면으로 검토해보고 적용해봐야겠다. 또, 그동안 JPA의 기본적인 개념을 많이 놓쳤었다... 반성하고 계속 공부하고 익혀야겠다.
'테스트코드 > ATDD, 클린 코드 with Spring' 카테고리의 다른 글
[ATDD, 클린 코드 with Spring 6기] 4주차 정리 (2) | 2023.03.13 |
---|---|
[ATDD, 클린 코드 with Spring 6기] 3주차 정리 (0) | 2023.03.02 |
[ATDD, 클린 코드 with Spring 6기] 2주차 정리 (0) | 2023.02.20 |