Spring 테스트 — 단위·통합 테스트 모범 사례
Spring 테스트 — 단위·통합 테스트 모범 사례
Spring 애플리케이션은 컨테이너가 객체를 조립·주입하다 보니, "테스트하려면 서버를 띄워야 하나?"라는 고민이 들기 쉬워요. Spring의 테스트 지원은 바로 그 지점을 해결해 줘요. 컨테이너와 데이터베이스를 필요로 하는 통합 테스트는 물론, 순수한 단위 테스트를 위한 모범 사례까지 함께 다뤄요.
출처: Testing
Spring 팀은 테스트 주도 개발(TDD)을 적극 권장해요. 그리고 올바른 IoC 사용이 단위 테스트와 통합 테스트를 모두 쉽게 만든다는 점을 강조해요.
왜 그럴까요? 클래스에 세터 메서드와 적절한 생성자가 있으면, 테스트에서 서비스 로케이터 레지스트리 같은 걸 세팅하지 않고도 객체를 쉽게 조립할 수 있거든요. 의존성을 생성자가 주입받는 구조라면, 테스트에서 실제 객체 대신 가짜(mock) 객체를 그대로 주입하면 돼요. 그게 IoC 스타일의 큰 강점이에요.
단위 테스트 vs 통합 테스트
- 단위 테스트(unit test) — 클래스 하나를 다른 객체와 분리해 동작을 검증해요. IoC 덕분에 의존성을 주입만 하면 되니 격리가 자연스러워요.
- 통합 테스트(integration test) — 컨테이너를 띄우고 실제 스프링 컨텍스트를 로딩해, 빈 조립과 데이터베이스 연동까지 포함해 검증해요. Spring의 테스트 프레임워크는 컨텍스트 캐싱 등을 지원해 통합 테스트를 빠르게 만들어 줘요.
요점은 "테스트하기 어려운 코드가 아니라 테스트하기 쉬운 구조가 좋은 설계"라는 거예요. 생성자 주입과 IoC가 그걸 가능하게 해 주고, Spring은 단위 테스트를 돕는 동시에 통합 테스트를 위한 강력한 지원을 제공해요.