이 테스트에서 볼 수 있듯이 AddressServiceTests에 @RunWith와 @ContextConfiguration 애너테이션을 붙였다. @RunWith 애너테이션에는 SpringJUnit4ClassRunner.class를 전달하여 스프링 통합 테스트를 활성화한다.1 한편 @ContextConfiguration 애너테이션에는 애플리케이션 컨텍스트를 어떻게 로드할지 지정한다. 여기서는 AddressBookConfiguration에 정의한 명세대로 스프링 애플리케이션 컨텍스트를 로드하도록 요청했다. SpringJUnit4ClassRunner는 애플리케이션 컨텍스트를 로드할 뿐만 아니라 자동 연결(autowiring : 오토와이어링)하여 애플리케이션 컨텍스트에서 테스트로 빈을 주입할 수 있다. 이 테스트는 AddressService 빈을 대상으로 테스트하므로 AddressService 빈을 테스트에 자동 연결했다. 마지막으로 testService() 메서드는 AddressService를 호출하고 결과를 검증한다.
@ContextConfiguration 애너테이션은 스프링 애플리케이션 컨텍스트를 로드하는 일은 훌륭히 해내지만, 스프링 부트 기능을 완전하게 로드하지는 못한다. 스프링 부트 애플리케이션은 코드 2-1과 같이 명시적으로 SpringApplication을 사용하거나 8장에서 살펴볼 SpringBootServletInitializer를 사용해야 완전히 로드된다. SpringApplication은 애플리케이션 컨텍스트를 로드할 뿐만 아니라 로깅과 외부 프로퍼티(application.properties 또는 application.yml) 로딩과 스프링 부트의 다른 기능을 활성화한다. @ContextConfiguration 애너테이션을 사용하면 스프링 부트의 이 기능을 이용할 수 없다.
스프링 부트의 기능을 통합 테스트에서 사용하려면 @ContextConfiguration 애너테이션을 스프링 부트의 @SpringApplicationConfiguration 애너테이션으로 바꿔야 한다.
@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes=AddressBookConfiguration.class) public class AddressServiceTests { ... }
1 스프링 4.2부터는 선택적으로 SpringJUnit4ClassRunner 대신에 JUnit 규칙 기반의 SpringClassRule과 SpringMethodRule을 사용할 수 있다.