서버 사이드 쪽의 소스가 (java파일) 변경되었을 때, 반영이 되려면 그때마다 WAS를 재기동해야 한다.
이번 포스팅은 이런 시간적 불편함을 해결해 주지 않을까 싶다.
테스트 하고 싶은 @RequestMapping에서 로그를 WAS 없이 확인이 가능하기 때문이다.
*주의사항
- jUnit은 12버전으로 업데이트 하여야 한다.
*요약
1. 메이븐(pom.xml) 설정
2. JSON 형식의 리턴을 위한 VO 만들기
3. jUnit으로 테스트 할 Controller 만들기
4. @RequestMapping 할 Controller 만들기
1-1. JAVA 버전, 스프링 버전 업데이트 방법
아래 포스팅을 참조하세요~~
1-2. '스프링 테스트' 디펜던시 설정
<!-- Spring Test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
위의 'spring-test 모듈' 라이브러리를 통해서 별도의 WAS 없이도 컨트롤러를 테스트할 수 있는 작업이 가능해진다.
참고로 스프링 3.2 버전부터 jUnit만으로 테스트가 가능하다.
1-3. jUnit 설정
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
jUnit 버전은 4.12로 맞춰준다.
1-4. servlet 버전 업데이트
<!-- Servlet without WAS, test -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
servlet 버전을 3.1.0으로 업데이트 해준다. (기본 버전은 2.5)
2. VO 만들기
package com.kkc.vo;
public class ProductVO {
private String name;
private double price;
public ProductVO(String name, double price) {
super();
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
@Override
public String toString() {
return "ProductVO [name=" + name +
", price=" + price + "]";
}
}
위와 같이 VO를 만들어준다.
특이사항이 있다면 toString()을 재정의 하였는데, 제대로 출력이 되는지 확인을 위해서다.
3. jUnit으로 테스트 할 Controller 만들기
package com.kkc.test;
import javax.inject.Inject;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/**/*.xml"})
public class NoWasControllerTest {
private static final Logger logger =
LoggerFactory.getLogger(NoWasControllerTest.class);
@Inject
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
logger.info("setup................");
}
@Test
public void testDoA() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/doJSON"));
}
}
위처럼 만들면, 톰캣 구동 없이 jUnit으로만 테스트를 할 수 있다.
'mockMvc'는 브라우저에서 요청과 응답을 의미하는 객체로 간주하면 된다고 한다.
마지막 부분의 testDoA 메서드는 "/doJSON" 주소로 매핑되어, 해당 영역이 실행될 것이다.
참고로, 이 컨트롤러는 jUnit 테스트를 위해 test 패키지에 위치 하여야 한다(아래 그림).
4. @RequestMapping 할 Controller 만들기
package com.kkc.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.kkc.vo.ProductVO;
@Controller
public class SampleController5 {
private static final Logger logger =
LoggerFactory.getLogger(SampleController5.class);
@RequestMapping("/doJSON")
public @ResponseBody ProductVO doJSON() {
logger.info("doJSON called.....................");
ProductVO vo = new ProductVO("샘플상품", 30000);
logger.info("vo.toString() : " + vo.toString());
return vo;
}
}
이전 포스팅에서는 HashMap을 리턴했는데, 위에서는 VO 객체를 리턴하고 있다.
(즉, VO 객체도 JSON 형식으로 웹 출력이 가능하다는 뜻이다)
화면 출력
Console 화면을 보면, "/doJSON"이 호출되어, 정상적으로 호출 되었다.
'개발 > 스프링' 카테고리의 다른 글
스프링4 - Jackson으로 웹에 JSON 형태로 출력하기 (0) | 2020.08.20 |
---|