프로젝트를 위해 스프링을 간단한 컨트롤러와 서비스 클래스를 만들어보았다.
스프링은 책으로만 보았지, 직접 사용해보긴 처음이라.. 감 좀 잡고 싶어서....
2.5.2 버젼을 사용하기 때문에 어노테이션을 활용해 보았다.
@Controller
public class BaseController {
Log logger = LogFactory.getLog(BaseController.class);
SearchService ss = null;
@Autowired
public void setSearchService(SearchService ss) {
this.ss = ss;
}
@RequestMapping("/search.gs")
public String search(HttpServletRequest request, HttpServletResponse response) {
logger.debug("controll.....");
logger.info("검색어 : " + request.getParameter("keyword"));
ss.search();
ModelAndView mv = new ModelAndView();
mv.setViewName("searchResult");
return request.getParameter("keyword");
}
}
앞 포스트에도 있는 건데 별건 없고 그냥 검색어 받아서 검색 해주는 척~~~ 하는 서비스를 가지고 있는 Control 이다. 어노테이션을 사용했고, xml에는 패키지 스캔을 하도록 설정해 주었다.
public class SearchServiceImpl implements SearchService {
Log logger = LogFactory.getLog(SearchServiceImpl.class);
@Override
public String search() {
// Search document by lucene
logger.debug("search....");
return "검색결과 입니다.";
}
}
이녀석이 검색하는 척~~~ 하는 녀석이다.
이렇게 해서 페이지는 뜨는데... 저것을 테스트 할 수 있는 클래스를 한번 만들어 보고 싶었다.
그래서 간단하게 하나 만들어 봤는데..
public class BaseControllerTest extends TestCase {
Log logger = LogFactory.getLog(BaseControllerTest.class);
private BaseController baseController = null;
@Override
protected void setUp() throws Exception {
baseController = new BaseController();
logger.debug("setup");
}
@Test
public void testController() {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
request.setParameter("keyword", "나이키");
String result = baseController.search(request, response);
logger.debug(result);
assertEquals(result,"나이키");
}
}
그리고 돌려보니 당연이 Exception이 발생한다.. 잠깐 생각해보니.. Controller는 생성 했는데
그 Controller가 사용하는 Service를 바인딩 시켜주지 못 한 거라...
책을 좀 찾아보니 EasyMock 이라는 라이브러리가 있길래 사용해볼까 하다가..
Junit4를 사용한 테스트 라는 것을 보게 되었다.
그래서 작성한 녀석이..
@ContextConfiguration(locations = { "classpath:config/applicationContext.xml",
"classpath:actions/action-config.xml",
"classpath:services/serviceContext-sample.xml" })
public class BaseControllerTest {
Log logger = LogFactory.getLog(BaseControllerTest.class);
@Autowired
private BaseController baseController = null;
@Test
public void testController() {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
request.setParameter("keyword", "나이키");
String result = baseController.search(request, response);
logger.debug(result);
assertEquals(result,"나이키");
}
}
아마 내부적으로는 xml 파일을 사용해 ApplicationContext에 xml에 설정해놓은 POJO 클래스들을 생성하는 것이 아닐까 싶다..
@Autowired를 해놓으면
자동적으로 BaseController와 거기서 사용하는 Service까지 같이 바인딩이 된다.
이로써 테스트 성공~~