ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 코드숨 스프링 3기 3주차 회고
    회고 2021. 8. 29. 23:00

    이번주는 테스트 작성하기를 진행하였습니다.

    https://github.com/CodeSoom/spring-week3-assignment-1/pull/36

     

    3주차 테스트 작성하기 - pangnem by PangNem · Pull Request #36 · CodeSoom/spring-week3-assignment-1

    3주차 과제 진행합니다 ~

    github.com

    기존에 단위 테스트 코드를 이미 작성해본 경험이 있었고, 이번 과제에서는 단위 테스트와 실제 웹에서 작동하는 것처럼 WebMvc 테스트도 과제에 포함되어 있었습니다.

    과정을 수행하고 크게 느낀 점으로는 다음과 같습니다.

    객체의 책임을 떠넘기는 부분은 테스트 코드에도 적용된다.

    과제풀이 영상에서, Controller가 웹에서 요청을 받아 Service로 넘겨준다면 Controller 테스트 코드는 Service에서 Controller가 이어주는 메서드가 호출되었는지만 검증하는 것으로 끝났다는 것이 조금 인상 깊게 남았습니다. 사실 테스트를 작성하면서 Web, Controller, Service 등의 코드가 매우 비슷하게 작성되는 것을 보고 이 부분에 대해 계속해서 중복이 되는 것 같았는데 이부분이 해결된 것 같았습니다.

    나중에는 TDD 기반으로 코드를 작성하게 될텐데, 그렇게 테스트를 작성하게 된다고 해도 다른 객체에게 책임을 떠넘기는 식으로 작성하게 된다면 테스트를 작성하는 데 더 부담이 적어질 것 같습니다.

    나의 관심사가 아닌 부분은 mock과 spy를 통해 쉽게 분리해낼 수 있다.

    기존에는 mock, spy에 대해 왜 써야하는지 잘 이해하지 못했는데, 이번 과정을 통해 어느 정도는 이해하게 된 것 같습니다. 잘 활용하면 의존성에 대해 분리하여 내가 테스트 하고자 하는 것에 집중하여 테스트를 작성할 수 있을 것 같습니다.

    다만 모든 것들에 mock을 적용하는 것은 좋지 않을 것 같습니다. 실제로 데이터가 잘 들어가는지 확인해야 될 때도 있는데, 이 부분은 mock이 아닌 실제 데이터를 검증하는 방법이 나을 수도 있다는걸 깨달았습니다. 그래서 실제 데이터를 저장하고 있는 TaskService라는 클래스는 mock을 사용하지 않고 실제 데이터를 검증하는 방식으로 테스트를 작성하였습니다. 

    spy 개념에 대해 이해하며 그린 그림..

     

    테스트의 명세를 잘 드러내기 위해 내가 어떤 테스트를 할 것인지를 먼저 고민해보아야 한다.

    테스트의 의도를 드러내기 위해, 테스트 출력 문구를 설정할 수 있는 @DisplayName을 적극 활용했습니다. 그러다 보니, 비슷한 구조이지만 요청하는 내용, 상황만 다른 경우가 종종 발생하였습니다. 그런데 계층 구조로 테스트를 작성하는 것은 재미있고 명세를 더 정확하게 해주었습니다. 종립님께서 작성하신 글을 보고 BDD, 계층 구조로 테스트를 작성해 보기도 하였는데 이 과정이 꽤나 재미있었습니다. Describe-Context-It 개념을 실제로 적용해 볼 수 있는 좋은 기회였던 것 같습니다. 

    다만 이렇게 계층 구조로 작성하게 된다면 많은 Inner Class들과 indent depth가 깊어지는 단점도 있기 때문에 이 부분은 취향, 혹은 정한 컨벤션에 따라 알맞게 선택하면 좋을 것 같습니다.


    자기 선언

    다음주에는 지금까지 배운 내용을 잘 활용하여 좋은 아키텍처 설계과 객체지향을 쓸 수 있도록 해보자.

    개인적으로 가장 기대되는 다음 4주차 과정입니다. 남은 과정도 화이팅!

    댓글

Designed by Tistory.