1주차 TDD TIL - Park-ha-neul/hhplus-e-commerce GitHub Wiki

테스트 주도 개발이라는 방법론을 1주차에서 학습했다.

코드를 작성하기 전, 테스트 케이스를 먼저 작성하고 그 테스트를 통과하는 코드를 작성하는 방식이다.

이 방법론을 적용하면 품질 높은 코드를 작성하고 버그를 줄이며 유지보수성을 높이는 데 효과적이다.

TDD의 주요 과정

TDD는 일반적으로 3단계로 이루어진다.

  1. RED ( 실패하는 테스트 작성 )
    • 먼저 테스트 케이스를 작성한다.
    • 이때, 실제로 구현되지 않은 기능에 대한 테스트를 작성하기 때문에 테스트는 실패한다.
  2. GREEN ( 테스트 통과를 위한 코드 작성 )
    • 테스트가 실패하는 것을 확인한 후 해당 테스트를 통과시키기 위해 최소한의 코드만 작성한다.
    • 코드가 테스트를 통과하도록 구현하는 데 집중하며 필요한 최소한의 코드만 추가한다.
  3. REFATCOR ( 리팩토링 )
    • 코드가 테스트를 통과하면 리팩토링을 통해 코드를 더 깨끗하고 효율적으로 개선한다.

결론 및 아쉬웠던 점

  • 테스트코드를 처음 설계하고 작성하다 보니 서비스를 만들기 전 테스트 케이스를 먼저 뽑는 것에 대한 이해도가 적었음
  • 단위 테스트는 controller, service, db 등 역할 별로 테스트 코드를 나눠서 작성했으면 더 좋았겠다라는 생각을 했음
  • 통합 테스트는 기존에 service 통합 테스트만 작성했는데 api 자체를 call 해서 db 값을 비교하는 방식으로 진행하는게 더 통합 테스트 개념에 맞겠다라는 생각을 했음
src
 └── main
     └── java
         └── com
             └── yourapp
                 ├── controller
                 │   └── UserController.java
                 ├── service
                 │   └── UserService.java
                 ├── repository
                 │   └── UserRepository.java
                 └── model
                     └── User.java
 └── test
     └── java
         └── com
             └── yourapp
                 ├── controller
                 │   └── UserControllerTest.java       <-- Controller 단위 테스트
                 ├── service
                 │   └── UserServiceTest.java         <-- Service 단위 테스트
                 ├── repository
                 │   └── UserRepositoryTest.java      <-- Repository 단위 테스트
                 └── integration
                     └── UserControllerIntegrationTest.java  <-- 통합 테스트

다음 주 목표

  • 통합 테스트 작성 시 서비스에 대한 통합 테스트만 작성했는데 controller 단에 통합 테스트로 작성해보고 싶음
  • 단위 테스트도 service만 작성하는게 아닌 controller까지 작성해보고 싶음