티스토리 뷰
* 개요
- 개발 중 기능에 대한 테스트를 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/spring 을 WEB-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 테스트 방법처럼 실행하면 스프링 초기화 과정을 볼 수 있다.
* 참고한 링크
* 오류 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 이므로 동일하게 적용 가능
'SW개발 > Spring Framework' 카테고리의 다른 글
Hibernate /Not all named parameters have been set (0) | 2017.10.31 |
---|---|
hibernate SQL Error: 1064, SQLState: 42000 (0) | 2017.05.31 |
Eclipse Spring MVC 프로젝트에 Hibernate 적용 (0) | 2017.05.19 |
Eclipse Spring MVC Project 시작 (0) | 2017.05.15 |
Hibernate Session / 동일 쿼리가 몇번 실행되다가 멈추는 현상 (0) | 2017.03.02 |