더북(TheBook)

4.1 통합 테스트를 위한 자동 구성

 

스프링 프레임워크가 수행하는 가장 핵심적인 작업은 애플리케이션을 구성하는 컴포넌트를 모두 연결하는 것이다. 이런 작업은 XML, 자바, 그루비, 어떤 기반이든 관계없이 연결 명세를 읽어 애플리케이션 컨텍스트 안에 빈 객체를 생성하고, 이 빈들을 그에 의존하는 다른 빈에 주입하는 식으로 수행한다.

스프링 애플리케이션을 통합 테스트할 때는 스프링이 애플리케이션을 출시 환경에서 실행할 때와 동일한 방식으로 테스트 대상 빈을 연결하는 것이 가장 중요하다. 물론 수동으로 컴포넌트 객체를 생성하고 서로에 주입할 수 있겠지만, 어느 정도 규모가 큰 애플리케이션에서는 작업이 고될 것이다. 또 스프링은 컴포넌트 검색과 자동 연결 등 부가적인 기능과 캐싱, 트랜잭션, 보안 등 선언적인 기능을 제공한다. 스프링이 하는 모든 일을 감안하면 복잡한 일은 (통합 테스트에서조차도) 스프링에 맡기는 것이 가장 좋다.

스프링은 1.1.1 버전부터 통합 테스트를 훌륭히 지원했다. 스프링 2.5부터는 JUnit 테스트에 사용할 스프링 애플리케이션 컨텍스트를 로드하고 테스트 클래스에 자동으로 주입하는 기능을 활성화하는 JUnit 클래스 러너인 SpringJUnit4ClassRunner를 제공하는 형태로 통합 테스트를 지원했다.

아주 기본적인 스프링 통합 테스트를 보여 주는 다음 코드를 살펴보자.


// SpringJUnit4ClassRunner를 이용한 스프링 통합 테스트
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=AddressBookConfiguration.class) // 애플리케이션 컨텍스트 로드
public class AddressServiceTests {
 
    @Autowired
    private AddressService addressService; // AddressService 주입
 
    @Test
    public void testService() { // AddressService 테스트
        Address address=addressService.findByLastName(“Sherman”);
        assertEquals(“P”, address.getFirstName());
        assertEquals(“Sherman”, address.getLastName());
        assertEquals(“42 Wallaby Way”, address.getAddressLine1());
        assertEquals(“Sydney”, address.getCity());
        assertEquals(“New South Wales”, address.getState());
        assertEquals(“2000”, address.getPostCode());
    }
 
}

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