원문:
https://www.epicweb.dev/good-code-testable-code
테스트 용이성이란?
코드의 복잡성과 테스트 설정의 복잡성 간의 관계를 설명하는 소프트웨어의 특성
코드만으로 테스트 용이성을 관찰할 수 없다.
복잡성 간의 관계
코드가 복잡하다고 해서 테스트 용이성이 낮은 코드를 의미하지 않는다.
Example
테스트 설정이 복잡하다고 해서 구현이 복잡한 코드를 의미하지 않는다.
Example
암시적 테스트로서의 테스트 용이성
코드의 테스트 용이성은 그 자체로 암시적 테스트이다.
테스트 용이성을 활용하여 코드의 실수를 발견할 수 있다.
코드가 너무 많은 일을 하고 있다면, 범위를 재고해봐야 할 것이다.
주의해야 할 점: 테스트 용이성이 구현의 원동력이 되어서는 안된다!
테스트를 더 쉽게 하기 위해 구현을 변경하는 것은 좋은 의도가 아니다.
코드는 테스트가 아니라 사용자를 위해 작성하는 것이다.
테스트를 위한 코드 설계가 아닌 사용자를 위한 설계를 해야 한다.
테스트는 시스템의 의도를 설명하기 위해 작성하는 것이다.
테스트가 코드에 영향을 미치지 않도록 해야 한다.
Example
테스트 용이성 향상
코드를 작성할 때 모범 사례(best practice) 를 따르라.
좋은 코드는 항상 테스트하기 쉽기 때문에, “좋은” 코드를 작성하려고 노력해야 한다.
하지만, 테스트 용이성은 단순히 모범 사례를 따르는 것만으로 충분하지 않다.
코드를 계속 변하기 때문에 테스트 용이성을 지속적으로 관찰해야 한다.
코드의 복잡성과 테스트 복잡성 사이의 관계를 분석하여 개선해야 한다.
테스트 설정 단계에서의 복잡성을 줄여라.
테스트 설정에 유틸리티 함수들을 제공함으로써 테스트 환경에 투자해야 한다.
예를 들어, 데이터베이스 모킹과 같은 반복적인 작업을 함수로 캡슐화할 수 있다.