더북(TheBook)

이 테스트에서 볼 수 있듯이 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 규칙 기반의 SpringClassRuleSpringMethodRule을 사용할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.