본문 바로가기

카테고리 없음

테스트 코드 잘 작성하기

돈과 직접적으로 맞닿아 있는 금융권 특성상 장애에 굉장히 민감합니다. 하지만, 굉장히 오래된 프로그램들을 사용하기도 하고 비즈니스 로직이 화면, 서버, SQL에 분산되어 있기 때문에 사소한 변경에 대해서도 영향도를 파악하거나 테스트하는데 많은 시간이 소요되었습니다.

또한, 프로그램 변경으로 인해 또 다른 문제가 발생하는 회귀 버그를 해결하기 위해서 이미 진행했던 테스트를 여러 번 반복하는 상황 때문에 생산성이 낮아질 수밖에 없는 환경에 아쉬움이 있었습니다.

 
그래서 이번에는 이러한 문제를 해결할 수 있도록 도와주는 테스트 코드를 잘 작성하는 법에 대해 정리를 해보려고 합니다.

 

테스트 코드의 필요성

1. 디버깅 비용을 절감할 수 있다.

2. 개발 과정에서 미리 문제를 발견할 수 있다.

3. 회기 버그 문제를 어느 정도 해결할 수 있다.

등이 있을 것 같습니다.

 

 

그렇다면 좋은 테스트 코드의 조건에는 무엇이 있을까요?

 

 

Fast : 유닛 테스트는 빨라야 한다.

하루에도 여러 번 수백, 수천 개의 테스트 코드들을 수행하기 위해서는 테스트 속도는 빠를수록 좋습니다. TestContainer와 같은 도구를 활용하여 멱등성 있는 환경을 구축하는 것도 중요하겠지만, 테스트 속도를 단축하기 위해서는 데이터베이스 같은 외부 환경을 사용하는 테스트를 줄이는 게 좋습니다.

예제 코드 추가하기

 

Isolated : 다른 테스트에 종속적인 테스트는 절대로 작성하지 않는다.

 

좋은 테스트는 테스트하고자 하는 단위 기능을 명확하게 해야 합니다. 또한, 다른 테스트에 의존적인 테스트는 테스트 결과를 불완전하게 만듭니다. 외부 요인으로부터 독립적인 테스트를 만들어야 테스트 실패 시 원인을 명확하게 파악할 수 있고 디버깅에 필요한 시간을 단축할 수 있습니다.

개발 원칙 중 DRY(Don’t Repeat Yourself) 원칙을 많이 들어보셨을 겁니다. 하지만 테스트 코드를 작성할 때만큼은 DAMP(Descriptive and Meaningful Phrases)하게 작성하는 것이 좋습니다.

 

예제 코드 추가하기

 

Repeatable : 테스트는 실행할 때마다 같은 결과를 만들어야 한다.

모든 테스트는 멱등성을 보장해야 합니다. 이를 위해서는 Mock 객체 등을 사용하여 외부 환경으로부터 독립적이고 반복적으로 수행하더라도 동일한 결과를 도출해내도록 구성해야 합니다.

 

예제 코드 추가하기

 

Self-validating : 테스트는 스스로 결과물이 옳은지 그른지 판단할 수 있어야 한다.

 

테스트 코드를 실행했을 때 성공 혹은 실패 여부를 판별할 수 있어야 합니다.

 

예제 코드 추가하기

 

Timely/Thorough

 

테스트는 적절한 때에 작성되어야 합니다.