티스토리 뷰

* 개요


- 개발 중 기능에 대한 테스트를 JUnit 을 통해 더 쉽게 할 수 있지만

Spring MVC 에서 선언된 Bean 등을 사용하기 위해서는 별도의 설정이 필요하다.

- spring-test.jar 를 추가하고 설정하는 과정을 알아본다.




* 테스트 환경


Windows 7 

Eclispe 4.4.1 Luna 

Spring webmvc 4.1.5 등

Gradle 2.4.7




* 1. spring-test.jar 추가


https://mvnrepository.com/artifact/org.springframework/spring-test

-  예제에서는 테스트 환경(Spring webmvc 4.1.5) 에 맞게 spring-test 4.1.5 를 추가해줌.

- 완료하면 SpringJUnit4ClassRunner 등의 클래스가 import 가능해짐




* 2. Deployment Assembly 설정


- 스프링 설정파일을 테스트 클래스에서 쓸 수 있도록 폴더 설정해줘야.

- 스프링 설정파일이 있는 폴더 경로를 WEB-INF/classes 로 배포하도록 설정

- 프로젝트 우클릭 > Properties > Deployment Assembly

후 스프링 설정파일의 배포 경로를 추가 설정

(여기서는 /src/main/webapp/WEB-INF/springWEB-INF/classes 로..)




- Gradle 환경에서

http://dogcowking.tistory.com/46




* 3. Test 클래스 생성 및 설정파일 위치 지정


- 테스트 클래스를 생성하고

- 테스트 클래스 앞에 @RunWith 와 @ContextConfiguration 의 기본 설정을 해줌.

- 테스트 클래스의 앞부분을 다음과 같이 설정함

(xml 파일은 모두 스프링 설정 파일들)

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations={

"/start-context.xml",

//"file:src/main/webapp/WEB-INF/spring/applicationContext.xml", //동일하게 가능

"/applicationContext.xml",

"/security-context.xml",

})

public class Test_1_Shop_Spring {

... 생략



* 설정을 마친 후 보통의 Junit 테스트 방법처럼 실행하면 스프링 초기화 과정을 볼 수 있다.



* 참고한 링크

http://hightin.tistory.com/42





* 오류 1

Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial





* 오류 2 

...

Caused by: java.io.FileNotFoundException: class path resource [WEB-INF/classes/hibernate.cfg.xml] cannot be resolved to URL because it does not exist


- (발생 원인) 하이버네이트 이용시 root-context.xml 에서 hibernate.cfg.xml 을 지정하게 되어 있음.

이때 경로를 /WEB-INF/classes/hibernate.cfg.xml 이런 식으로 지정하게 되어있음.


- src/main/java( 또는 src/main/resource) 아래에 hibrenate.cfg.xml 을 놓게 되면 

컴파일시 컴파일폴더/classes/ 아래로 들어가게 됨 (build path -> Source -> Output folder 설정에 의해서... )


- 웹 프로젝트의 경우 컴파일 폴더가 'WEB-INF' 이므로 hibernate.cfg.xml 의 위치는

웹프로젝트/WEB-INF/classes/ 아래가 됨.


- 하지만 JUnit 테스트의 경우는 

JUnit 테스트 컴파일 폴더/classes 아래로 생성됨.

즉  WEB-INF가 생성되지 않음.

(Deployment Assembly 에 WEB-INF 설정이 있지만, 이건 웹 프로젝트 할때만 적용)


- root-context.xml 이 지정하고 있는 hibernate.cfg.xml 의 위치는

/WEB-INF/classes/hibernate.cfg.xml 이므로 당연히 JUnit 테스트 시에는 파일의 위치가 달라짐. 




- (해결 방법)

xml 파일은 설정 자체를 바꿔야 하고

xml 에서 PropertyPlaceholderConfigurer 이용해 불러다 쓰는 외부파일의 경우


src폴더로 옮기고

위치 설정은

<value>classpath:/bbs.properties</value> 


로 하면 됨.


JUNIT 실행시  '/' 는 classes 와 같으므로

(classes)/bbs.properties 로 될 거고


웹 프로젝트는 

'/' 는 /WEB-INF/classes 이므로 동일하게 적용 가능






공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함