[아티클 요약] 테스트하기 좋은 코드
테스트하기 좋은 코드를 주제로 한 4개의 글을 하나로 정리했습니다. 귀찮다는 이유로, 실제 돌아가는 코드가 더 중요하다는 이유로 테스트 코드를 필수가 아닌 보조적인 수단으로 생각했는데 같은 레벨로 봐야 한다는 글쓴이의 주장이 인상적입니다. [요약] 1. 테스트 코드란 - 구현 코드와 같은 레벨로 봐야하며 테스트가 어렵다는 것은 구현 코드의 설계가 잘못될 확률이 높다는 힌트가 된다. 이 힌트를 바탕으로 구현 코드를 변경할 수 있다 2. 테스트하기 좋은 코드? - 순수함수 ( 여러번 실행해도 같은 결과를 반환하는 함수) 3. 테스트하기 어려운 코드 - 개발자가 제어할 수 없는 값에 의존X (ex. Random, new Date, 전역변수) - 외부에 의존하는 코드 (ex. 외부 API , 데이터베이스) 4. 코드 개선 - 부수효과를 초래하는 코드를 최대한 코드 진입점에 가까운 위치로 미루기 (ex. 자바스크립트의 이벤트 핸들러, 자바의 Controller) - 함수/메서드 인자로 부수효과를 일으키는 값 전달하기 - 혹은 의존성 주입 패턴을 적용. 제어할 수 없는 값을 반환하는 인터페이스를 두어 테스트 코드와 구현 코드에서 다르게 사용 (ex. 구현코드에서는 Date.now( ) 값을 반환하는 객체를, 테스트 코드에서는 생성자에서 입력받은 값을 반환하는 객체를 사용) - 비공개 메소드들(private)이 많다면 연관된 메소드들을 묶어 클래스로 추출하기 (ex. 주문 취소 기능 구현을 테스트 할 때 금액이 양의 정수인지 판단하는 로직을 Order 클래스 에서 Money 클래스로 추출)