토비의 스프링 부트 - 이해와 원리/섹션6 - DI와 테스트, 디자인 패턴
DI와 단위 테스트
DOGvelopers
2024. 10. 8. 23:07
반응형
요약 및 결론
단위 테스트와 통합 테스트의 차이점, 그리고 더 효율적인 테스트 방식을 소개하며, 테스트 코드의 작성과 개선을 다루었습니다.
핵심 내용
테스트 대상의 정의:
- 앞서 작성한 테스트 코드들은 API와 그 의존 객체인 SimpleHelloService의 기능을 검증하는 테스트.
- 테스트는 단순한 자바 메서드를 통해서도 가능하며, 이를 통해 테스트 속도를 크게 줄일 수 있음.
단위 테스트 (Unit Test) 작성:
- SimpleHelloService와 같은 자바 클래스를 직접 테스트하는 단위 테스트는 서버를 실행할 필요가 없으며, 이를 통해 테스트 속도가 매우 빠름.
- 예시로 HelloService에 대해 단위 테스트를 작성해, isEqualTo 메서드를 사용해 예상한 인삿말과 응답을 비교함.
- HelloController와 같은 의존 관계가 있는 클래스의 경우, 의존 객체를 직접 구현해 테스트할 수 있음.
Mocking 및 테스트 스텁:
- HelloController와 같은 클래스의 테스트 시 의존 객체인 HelloService를 단순화하거나 Mock으로 구현해, 이를 간단한 Lambda식으로 처리할 수 있음.
- 이는 테스트 스텁을 사용한 예시로, 의존 객체로부터 고립된 테스트를 가능하게 함.
예외 상황 테스트:
- Null 값이 들어오는 경우나, 빈 문자열을 처리하는 예외 상황을 처리하는 테스트도 작성.
- 예외 발생 시 NullPointerException이나 IllegalArgumentException과 같은 예외를 기대하고 테스트하며, AssertJ를 통해 예외 발생 여부를 검증.
성능 및 개선:
- 단위 테스트는 테스트 실행 속도가 매우 빠름(약 50ms), 통합 테스트와 비교해 효율적.
- 빠른 테스트를 통해 더 많은 테스트 케이스를 검증할 수 있으며, 테스트가 빠르게 실행될수록 개발 생산성이 높아짐.
의존성 주입과 수동 DI:
- 테스트 시 의존 객체를 수동으로 주입하는 방식도 가능하며, 이를 통해 테스트 환경에서의 수동 DI(Dependency Injection)라고 부름.
- 이 개념은 Spring의 의존성 주입 원리와 유사하며, 테스트 코드에서 Spring 컨테이너를 사용하지 않고도 의존 관계를 설정할 수 있음.
결론:
단위 테스트는 빠르고 효율적인 방법으로, 의존성을 줄이고 직접적인 검증을 가능하게 한다. 이를 통해 코드의 품질과 유지보수성을 높일 수 있으며, 테스트 코드 자체가 의존성 주입의 원리를 구현하고 있음을 설명.
반응형