본문 바로가기

SPRING_SETTING/spring

JUnit test에서 application context를 로딩하기

일반적으로 Web Application을 만들게 되면 WEB-INF 에 web.xml과 같이 또는 서브 디렉토리를 더 만들어서 이 곳에 bean configuration 파일들을 놓게 됩니다. 특히나 STS(SpringSource Tool Suite)에서 Spring MVC Project를 생성하게 되면 maven을 사용하도록 설정하기 때문에 프로젝트의 디렉토리 구조는 더 복잡해 집니다.

src/main/java  --> classes
src/main/test --> test classes
src/main/webapp --> web contents

보통은 JUnit test에서 application context를 로딩하기 위해 @ContextConfiguration을 사용하게 되는데 webapp은 class path에 포함되지 않기 때문에 "classpath:~" 하는 식으로 그 위치를 지정해 줄 수가 없습니다. 그렇다면 파일 위치를 직접 지정해 주는 방법 밖에는 없겠죠? ful path를 다 적어주면 내 컴퓨터 환경에서 밖에 사용할 수 없으므로 working directory에 상대적으로 지정해 주면 됩니다. 방법은 아래와 같습니다.

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations={

"file:src/main/webapp/WEB-INF/spring/root-context.xml"

"file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml"})


이렇게 해주면 로딩이 잘 됩니다. maven을 통한 test도 잘 진행되구요. 그런데 한가지 우려되는 것은 모든 테스트 클래스에 이 걸 다 넣으려면 짜증나겠죠? 까먹을 수도 있고 중간에 bean configuration 파일의 위치나 이름이 변경되면 모든 테스트 클래스를 열어서 다 바꿔줘야 합니다. 이럴 때는 상속을 사용하면 편리합니다.


@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations={

"file:src/main/webapp/WEB-INF/spring/root-context.xml"

"file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml"})

public abstract class AbstractApplicationContextTest {

@Autowired protected ApplicationContext context;

}


위와 같이 클래스를 만들고 Application Context가 필요한 테스트 클래스에서 상속해서 사용하면 됩니다. 


퍼온곳 ==  http://hightin.tistory.com/42