코딩/생각&후기&기록

Test Code - 좋은 점

춘 몽 2024. 11. 14. 09:59
728x90

테스트코드가 좋다는 말을 보고 생각은 하고 있었다.

하지만 배우면서 실습해보느라 바쁘다보니 테스트코드를 공부하고 해보는건 뒤로 미루어져있었다.

 

그러다 이번에 테스트코드를 공부하고 적용해보았다.

사실 적용해보는건 이미 짜놓은 잘돌아가는 코드를 보고 작성한것이다보니 별 문제없이 테스트도 잘 통과되었었다.

 

내가 제대로 테스트코드의 좋음을 느낀건 새로운 코드를 작성할 때였다.

서버의 로직은 대부분 request가 들어와야 동작한다. 그래서 확인을 위해 postman을 많이 사용하고, 지금 내 프로젝트는 내가 front도 만들고 있다보니 front로 요청을 보내서 테스트해보고 있었다.

 

문제는 회원탈퇴 후 7일된 회원들을 하루에 한번 삭제하는 스케줄 로직을 만드는데서 발생했다.

이를 개발하면서 잘 돌아가는지 테스트하기 위해 front로 가입한 후 탈퇴하고, pgAdmin으로 회원을 조회 후 deletedAt의 날짜를 7일보다 전으로 수정 한 후 세이브하고, 스케줄을 1초로 바꿔서 실행시켜보고, 다시 pgAdmin으로 삭제가 잘 되었는지 회원을 조회하여 확인해야 했다.

 

글만봐도 상당히번거로운 확인작업인데 이게 원하는데로 작동을 안해서 코드를 고치고, 앞서 말한 방법으로 계속 확인/테스트를 하다보니 엄청 불편했다.

그리고 이때 공부했던 테스트코드가 떠올랐다.

 

솔직히 이때까지는 integration 테스트가 좀 모호한 위치에 있다고 생각했었다.

mock으로 작은단위를 테스트하고, e2e로 실제 요청을 테스트하면 왠만한 테스트는 다 될것이라고 생각했기 때문이다.

하지만 이번처럼 front의 요청으로 들어오는게 아니고, db의 데이터를 직접확인해볼 필요가 있는 경우는 integration 테스트가 확실히 알맞았다. 그리고 이번처럼 db의 반환값이 예상과 다른걸 경험해보니 db를 mock처리하는게 옳을지에 대한 생각도 좀 들었다.

 

무튼, 그래서 integration 테스트코드를 작성하고 테스트했다.

솔직히 integration 테스트코드는 처음 작성해보는거라 처음 세팅을 작성하는데 좀 오래 걸렸다.

하지만 내가 짠 코드를 테스트하는데 있어서는 매우 만족스러웠다.

회원등록하고, 탈퇴한지 1주일된 회원으로 변경하고, 삭제 로직을 돌리면서 이 중간중간 내가 생각한 값들이 잘 나오는지 expect로 체크를 하다보니 확실히 어디가 내 예상과 달라서 문제인지 쉽게 확인이 가능하고, 당연히 앞서 했던 직접적인 확인대신 명령어 한번으로 쉽게 테스트할 수 있는 점이 너무 편했다.

이번 문제는 내가 cascade에 대하여 잘 알지 못해서 생겼던 문제로 상당히 여러번 테스트가 진행되었었는데, 중간에 테스트코드로  변경하지 않았다면 진짜 엄청난 노가다가 되었을 것이다.

 

그리고 또 한번 테스트코드의 좋음을 느꼈는데, 이는 코드의 로직을 변경할 때였다.

앞서 회원탈퇴 후 7일된 회원을 삭제하는 로직을 추가하면서, 반대로 7일 이내에 재가입하는 사람들을 softdelete와 restore하는 repository를 Auth에서 User로 변경했다.

때문에 코드의 위치들이 변경되었고, 이에 따라 service 뿐만 아니라 controller 그리고 path도 변경이 되었다.

이 변경되는 점들을 일일이 다 기억하고 수정하는건 정신력을 소모하는 일이다. 하지만 앞서 테스트코드를 작성해놓았기 때문에 기억나는 부분들을 수정하고, 테스트코드를 돌려보니 내가 수정하지 않았던 부분들을 쉽게 파악하고 수정할 수 있었다.

 

정리하자면 솔직히 코딩을 막 배우고 있는 입장에서 테스트 코드를 공부하고 적용하는건 쉬운일이 아니다.

하지만 이를 습득하고 적용하게된다면 코드를 짜는데 있어서 검증이 쉽게 가능하고, 나중에 코드를 변경/수정 하는데 있어서 생겨날 오류를 예방할 수 있다.

 

적고보니 테스트코드가 좋다는 말을 보았을 때 적혀있던 이유를 내가 적고 있는게 좀 웃기다.

솔직히 테스트코드를 완벽히 알고있는건 아니지만, 그래도 성장하고 있는 느낌은 든다.

 

++

https://springdream0406.tistory.com/224

 

Test Code 2 - 개선생각과 방향

통합테스트 코드를 작성해본 후, 대부분을 mock으로 처리해놓은 현재 유닛테스트에 대한 의문을 가지고 있던 중, https://tech.inflab.com/20230404-test-code/ 테스트 코드를 왜 그리고 어떻게 작성해야 할

springdream0406.tistory.com

 

728x90