테스트하기 쉬운 코드의 조건들에 대해 설명해주세요.
분야: 프론트엔드
테스트 용이성을 높이기 위한 몇 가지 조건들에 대해 설명드리겠습니다.
첫째, 순수 함수가 테스트하기 용이합니다. 순수 함수란 동일한 입력에 대해 항상 동일한 출력을 반환하는, 부수 효과가 없는 함수를 의미합니다. 부수 효과를 일으키는 비순수 함수를 테스트하는 것은 까다롭습니다. 예를 들어, 함수 외부의 상태에 의존하거나, API 호출을 하거나, DOM을 직접 조작하는 등의 동작이 포함된 함수는 외부의 영향을 받으므로 테스트의 정확성을 보장받기 어렵습니다. 반면, 입력을 받아 단순히 계산한 값을 반환하는 순수함수는 독립적으로 테스트하기 좋습니다.
둘째, 단일 책임 원칙을 준수한 코드가 테스트하기 용이합니다. 하나의 함수나 모듈이 한 번에 많은 역할을 수행하면 테스트를 작성하기 어려워집니다. 예를 들어, 데이터를 가져오는 함수가 UI를 렌더링하는 기능까지 포함하고 있다면, 테스트를 작성하기 불리합니다. 테스트 코드의 복잡도가 증가하며, 테스트가 실패할 때 그 원인을 파악하기 어려워지기 때문입니다. 역할을 명확히 분리하여 한 가지 기능만 담당하도록 설계하면, 테스트 코드가 간결하고 명확해집니다.
셋째, 예측하기 쉬운 코드가 테스트하기 용이합니다. 코드가 복잡하고 내부 동작을 쉽게 이해할 수 없다면, 테스트를 작성하는 것도 어렵습니다. 따라서 명확한 변수명과 일관된 코드 스타일을 유지하고, 예상치 못한 동작이 발생하지 않도록 설계하는 것이 중요합니다.
테스트 용이성을 높이기 위해 코드를 수정하는 게 합리적일까요? 🤔
테스트를 위해 코드를 과도하게 수정하는 것은 오히려 유지보수성을 해칠 수 있습니다. 예를 들어 테스트를 위해서 private 메서드를 public으로 바꾸거나, 테스트만을 위한 메서드를 만드는 등의 행위는 코드의 품질을 저하시킬 수 있습니다.
다만, 테스트 작성이 어렵다면 코드 품질에도 문제가 있을 가능성이 큽니다. 예를 들어, 함수가 너무 많은 역할을 하거나, 의존성이 강하게 결합되어 있다면 테스트가 어려워질 수 있습니다. 이럴 때는 테스트를 쉽게 만들기 위해 코드 개선을 고려하는 것이 좋습니다. 이러한 개선은 테스트 용이성을 높일 뿐 아니라, 궁극적으로 코드의 품질을 높이기 때문입니다.