회고

20220627 TIL #테스트코드의 중요성

paran21 2022. 6. 29. 22:26

프로젝트를 하면서 최소한 서비스에서 단위테스트는 만들고 있지만, 이것만으로는 부족한 것 같아서 통합테스트도 추가하기로 했다.

 

특히 우리 프로젝트는 주요 로직들이 모두 특정조건에서 데이터베이스에서 데이터를 조회하거나, 업데이트를 하는 것이라서

Repository에 Fake 객체를 만들어서 특정 값을 리턴하는 방식으로 Repository를 분리한 단위테스트만으로는 한계가 있는 것 같다.

 

그래서 DB connection을 갖는 통합테스트를 통해 특정 데이터를 DB에 저장해서 테스트를 하기 위한 상황을 만들고,

해당 데이터를 조회하거나, 원하는 경우에 의도한 에러가 잘 나타나는지 확인하였다.

그리고 테스트가 끝나면 테스트를 위해 저장한 데이터들은 모두 롤백하였다.

 

이미 일부 파트는 운영을 하고 있는 프로젝트이고 아주 critical한 이슈는 없었기 때문에 테스트코드를 짜고, fail을 확인하면서도 이걸로 에러를 잡을거라고 생각하지 않았다.

그런데 테스트에서 실패가 떠서 확인하는 중에 정말 큰 에러를 발견했다!!

Repository를 잘못 주입한 것이었는데, 아마 비슷한 로직들을 복붙해서 코드를 만들다가 발견한 실수같다...

DB에서 데이터 수정이 필요하지만 다행히 아주 큰 문제는 없는 것 같다.

그렇지만 지금 발견하지 못하고 지나갔다면 절대 발견하지 못했을 것 같다.

 

테스트코드의 편의성을 한번 경험하고 나니 테스트코드가 없으면 코드를 수정할 때도 불안하고, 간단한 기능구현을 하고 나서도 코드에 확신이 생기지 않는 것 같다.

웹에서 정상적으로 조회가 되는 걸 확인해도 최소한 정상적으로 동작하는지 확인하는 테스트코드라도 만들어야 한 스텝은 끝난 거 같달까.

 

아직 테스트코드를 먼저 작성하는 TDD까지는 익숙해지지 않았지만, 나중에 테스트코드를 짜도 지금 코드에서 더 개선할 점은 없는지, 결합이 너무 강하지는 않은지, 메소드가 너무 많은일을 하고 있지는 않은지 등등 여러가지를 생각해볼 수 있는 것 같다.