테스트 하기 어려운 코드
테스트 하기 어려운 코드에는
1. 하드코딩된 경로
2. 의존 객체를 직접 생성
3. 정적 메서드 사용
4. 실행시점에 따라 달라지는 결과
5. 역할이 섞여있는 코드
등등 이것 외에도 여러가지 이유로 테스트가 어려울수 있다.
테스트 가능한 설계
위의 테스트가 어려운 코드의 주된 이유는 의존하는 코드를 교체할 수 있는 수단이 없기 때문이다.
해결방안
1. 하드 코딩된 상수를 생성자나 메서드 파라미터로 받기
하드코딩된 상수때문에 테스트가 힘들다면 해당 상수를 교체할 수 있는 기능을 추가하면 된다.
쉬운 방법으로는 생성자나 세터를 사용해 전달받는것이다.
2. 의존 대상을 주입 받기
생성자나 세터를 통해 의존 대상을 교체한다.
3. 테스트하고 싶은 코드를 분리하기
원하는 기능을 별도의 클래스로 빼내어 테스트 한다.
4. 시간이나 임의 값 생성 기능 분리하기
현재 일자를 구하는 기능을 분리후 분리한 대상을 주입할 수 있게 변경한다.
임의 값 또한 해당 값을 제공하는 라이브러리를 직접 사용하지 말고 별도로 분리한 타입을 사용하여 대역으로 처리한다.
5. 외부 라이브러리는 직접 사용하지 말고 감싸서 사용하기
테스트 대상이 사용하는 외부 라이브러리를 쉽게 대체할 수 없는 경우도 있다.
그럴 경우에는 외부 라이브러리를 직접사용하지 말고 라이브러리와 연동하기 위한 타입을 따로 만든다.
그리고 테스트 대상은 분리한 타입을 사용하게 바꾼다.
'책 리뷰 > 테스트 주도 개발 시작하기' 카테고리의 다른 글
Chapter 10 : 테스트 코드와 유지보수 (1) | 2024.12.07 |
---|---|
Chapter 9 : 테스트 범위와 종류 (0) | 2024.12.06 |
Chapter 7 : 대역 (0) | 2024.12.03 |
Chapter 6 : 테스트 코드의 구성 (0) | 2024.12.01 |
Chapter 5 : JUnit 5 기초 (0) | 2024.11.30 |