회사에 테스트 프레임웍을 포함해 테스트코드는 하나도 없어서 내가 구축해서 해보려고 하는데
난관이 많았다 ... 위 에러는 비교적 간단하지만 그래도 글을 남겨본다
우리가 대표적으로 사용하는 tomcat은 서블릿컨테이너를 포함하고있는데
웹 어플리케이션을 이클립스에서만 빌드해본게아니라 maven 명령어로 빌드해보신분들은 잘 아실꺼다
빌드하는 순간 javax.servlet ... 어쩌구 에러가 나는데 이게 단순히 mvn package 명령어로 빌드하는 시점에는
서블릿 컨테이너가 없기 때문에 컴파일시점에서는 오류가 난다.
그래서
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
위와같이 scope 설정을 provide로 둔다. provided 설정은 javax.servlet 에 대한 의존관계를 컨테이너에게 떠넘긴다? 라고 생각하면 편하다. 따라서 빌드하는 시점에는 오류가 나지 않는다.
뭐 이거는 그렇다 치고 .. 똑같이 웹어플리케이션을 테스트할때도 마찬가지다.
junit이 돌아갈때는 javax.servlet 패키지에 대한 의존관계를 아무도 해결해주지 않기때문에 스프링 컨테이너가 올라가는 시점에 에러가 난다.
No qualifying bean of type [javax.servlet.ServletContext] found for dependency ... 어쩌구
이때 사용 할 수 있는것이 바로
@WebAppConfiguration 어노테이션이다.
spring doc을 확인해보면
The presence of @WebAppConfiguration on a test class indicates that a WebApplicationContext should be loaded for the test using a default for the path to the root of the web application.
테스트 클래스에 @WebAppConfiguration이 있으면 웹 응용 프로그램의 루트에 대한 경로에 대한 기본값을 사용하여 테스트를 위해 WebApplicationContext를로드해야 함을 나타냅니다.
라는 말이 있다. 여기서 경로에 대한 기본값은 따로 지정하지 않으면 "src/main/webapp" 로 올라간다.
'etc' 카테고리의 다른 글
[Jenkins] Jenkins 에서 process kill 되는 현상 (0) | 2019.08.06 |
---|---|
[Maven] pom.xml 에서 ojdbcxx 10.x.x.x.x 못받아올때 (0) | 2019.08.02 |
[Maven] mvn package 이후 packing된 war파일 안에 xml 파일 없어졌을때 (0) | 2019.07.30 |
[Maven] Eclipse에서 Maven Update 이후 jdk 1.5로 변경되는 에러 (2) | 2019.07.25 |
[Mockito] java.lang.NoClassDefFoundError: org/mockito/cglib/proxy/Enhancer 에러 (0) | 2019.07.24 |