[우테코 7기 프리코스 2주 차] TDD

2024. 10. 31. 23:16우아한테크코스

 

프리코스 2주 차, 테스트로 시작해 테스트로 마쳤다.

 

테스트 코드는 백엔드 개발자로서 필수적인 요소라고 익히 알고 있었지만, 실제로는 몇 번의 프로젝트를 진행하면서 테스트를 적극적으로 진행해 본 경험이 없었다. 부끄럽다.

 

그 이유를 나열하기엔 모두 변명일 뿐, 이번 기회에 TDD를 통해서 내 코드의 퀄리티를 검증하는 방법을 제대로 경험하고 싶었다. 리뷰가 간절했고...

 


 

TDD

 

Test Driven Development

 

테스트를 먼저 작성하고, 테스트를 통과시키는 프로덕션 코드를 작성한 뒤 리팩토링하는 과정.

Red-Green-Blue 단계로 이루어져, 기능 개발과 리팩토링을 반복적으로 수행하며 코드 품질과 안정성을 높이는 개발 방식.

 


 

 

경험

 

테스트를 먼저 작성해야한다

 

테스트를 먼저 작성하라고 권장하는 이유, 머리로는 이해했지만 실천하는 것은 쉽지 않았다. 

단순히 테스트를 작성하는 것을 넘어서, 요구 사항을 제대로 이해하고 기능별로 올바르게 분리하는 과정이 필요했기 때문이다.

 

 

테스트 코드와 프로덕션 코드의 상호작용

 

테스트를 먼저 작성하는 방법론보다는, 테스트의 본질에 집중하기로 했다. 테스트를 기반으로 과감히 리팩토링을 수행하면서, 더욱 견고하고 유연한 코드를 만드는 것을 목표로 삼았다. 그러다 보니 테스트는 점점 더 작게 쪼개지고, 서로 간의 의존성은 줄어들었다.

 

 


 

 

기억에 남는 테스트

 

 

유저가 아무것도 입력하지 않는 상황은 예외 처리 대상이지만, 이는 InputHandler의 책임 범위에 포함되지 않기에 문제가 되지 않는다.

 

 

유저 입력을 검증하는 테스트는 UserInput 클래스를 통해 독립적으로 실행할 수 있다.

 

 

옵저버 삭제 테스트에서는 Mock을 활용해 삭제 동작을 명확히 검증할 수 있다.

 

 

제공된 테스트 메서드로 랜덤 값을 미리 지정할 수 있다.

 

 


 

마무리

 

 

테스트가 독립적으로 동작한다는 것은 객체 간의 결합도가 낮다는 것, 개념적으로는 알고 있었지만, 직접 경험해 보니 그 의미가 와닿았다.

 

또, 이번 과제에서 무작위 값을 다루다 보니 테스트의 완벽성을 보장하기 어려웠지만, 제공된 테스트 클래스 덕분에 랜덤 값을 미리 지정하는 유용한 접근 방식(Mockito를 활용한 Mocking)을 배울 수 있었다.

 

코드 리뷰를 진행하며 테스트 코드에 집중해 보니 참고할만한 코드들이 많더라. 차근차근 내 것으로 만들어야겠다. 모두!