TEST 로 --일단은 환경설정과 싸움/..완성시키기
마지막으로 TEST 배우고 있습니다. 늘 느끼지만 선생님께서 가르쳐 주실때는 엄청 간단한 것 같더니
내가하면 세상 그렇게 까다로울 수가 없습니다.
오늘은 TEST로 시험을 봤습니다......점수는 묻지 마세요..ㅠㅠ
암튼 시험예제를 구동시켜 보았습니다.
package com.sunit.verify.member.controller;
import java.util.HashMap;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.sunit.verify.member.service.MemberService;
@Controller
public class MemberController {
@Autowired
private MemberService service;
@RequestMapping(value = "/beginSpring/memberRegister.action", method = { RequestMethod.POST })
public ModelAndView memberRegisterEnd(HttpServletRequest request, ModelAndView mv) {
try {
String userid = request.getParameter("userid");
String passwd = request.getParameter("passwd");
String name = request.getParameter("name");
String email = request.getParameter("email");
String tel = request.getParameter("tel");
HashMap<String, String> paraMap = new HashMap<String, String>();
paraMap.put("userid", userid);
paraMap.put("passwd", passwd);
paraMap.put("name", name);
paraMap.put("email", email);
paraMap.put("tel", tel);
int n = service.memberRegister(paraMap);
String result = "";
if (n == 1)
result = "회원가입 성공!!";
else
result = "회원가입 실패!!";
mv.addObject("result", result);
mv.setViewName("memberRegisterResult");
} catch (Exception e) {
mv.addObject("error", "회원가입도중 오류가 발생하였습니다");
mv.setViewName("error");
}
return mv;
}
}
여기는 controller // 시험구문엔 반환형이 String이였는데 내가 돌리니깐 안되서 일단 이것도 ModelAanView로 변경
package com.sunit.verify.member.service;
import java.util.HashMap;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class MemberService {
@Autowired
private SqlSession session;
public int memberRegister(HashMap<String, String> paraMap) {
int result = session.insert("", paraMap);
return 1;
}
}
내가만든 service//// 시험구문엔 없었는데 controller에 보내는 구문이 있으니깐 그냥 만들어 봤고....mapper까지 만들라니 귀츈......도메인도 만들었는데...이건 다들 아실꺼라 pass
package com.sunit.verify.member;
import static org.junit.Assert.fail;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.queryParam;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
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.ResultActions;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import com.sunit.verify.member.service.MemberService;
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= {"file:src/main/webapp/WEB-INF/spring/root-context.xml"
,"file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml"})
public class MemberControllerTest {
private static final Logger logger = LoggerFactory.getLogger(MemberControllerTest.class);
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc=MockMvcBuilders.webAppContextSetup(this.wac).build();
logger.info("setup()완료~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
}
@Test
public void testMemberRegister() throws Exception {
//fail("Not yet implemented");
logger.info("===== testMemberRegister() 메소드 시작 =====");
try{
((ResultActions) ((MockHttpServletRequestBuilder) mockMvc.perform(post("/beginSpring/memberRegister.action")))
.param("userid", "leess")
.param("passwd","qwer1234$")
.param("name","이순신")
.param("email","leess@gmail.com")
.param("tel","01023456789"))
.andDo(print())
.andExpect(status().isOk());
logger.info(">>> 테스트 수행 성공!!<<< ");
}catch(Exception e) {
logger.info("테스트 수행 실패 : ",e.getMessage());
}
}
}
TEST클래스.... 연습하다가 뜬금없이 깨달았는데
private static final Logger logger = LoggerFactory.getLogger(MemberControllerTest.class); 구문이
homeController에 있더라구요.......가까이 있었으나 몰랐던.. 눈뜬 장님이였어요.
암튼 MockMvc 생성하고 하라는 거 했고......
환경설정은 원래 해야하는거 그대로 했습니다.
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.18.RELEASE</version>
<scope>test</scope>
</dependency>
pom.xml 에 test 환경설정 해주고.....이건 이미 배웠는데 1가지 추가로
servlet 버전 안 맞는다고 변경하는거예요....이거 사실 전날 집에서 연습했을때 에러났던 부분인데
servlet버전이 안맞아서 변경하면 AspertJ 버전에서 빨간줄이 쳐져요.....이것도 같이 변경하라고는 하는데
어떻게 변경하라고는 안나오는건에요....찾기도 힘들고....그래서 어제는 그냥 에러상태로 뒀던건데..
오늘도 시험 문제서는 변경하라고 해서 그냥 변경했는데 역시나 빨간줄 x 표시 되죠...
근데 이번에는 어떻게 처리하는지 검색 성!공! 했습니다.
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
바로바로바로
servlet 버전을 변경하면서 servlet-api --> javax.servlet-apl으로 변경
즉 javax. 를 추가하면 됩니다.
빨간 줄 삭제.....!!!!!!
그외에서 에러난게 많았으나......조금씩 정리해보는거죠...ㅋㅋ.....
servlet-context.xml 파일명 오타도 있고......
이런거 다 정리해서 돌려보는거지요.... test는 되었는데 결과값은 예외 오류 입니다..
여기서 부터는 잘모르겠어서 다음날 샘찬스 쓸겁니다........쓸수 있는 날짜도 얼마 안남았어요..ㅠㅠ
///////////////////////////////////////////////////////////////
controller수정.......여긴 크게 한게 없는데 이쁘게 정리^^
package com.sunit.verify.member.controller;
import java.util.HashMap;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.sunit.verify.member.service.MemberService;
@Controller
public class MemberController {
@Autowired
private MemberService service;
@RequestMapping(value = "/beginSpring/memberRegister.action", method = { RequestMethod.POST })
public ModelAndView memberRegisterEnd(HttpServletRequest request, ModelAndView mv) {
try {
String userid = request.getParameter("userid");
String passwd = request.getParameter("passwd");
String name = request.getParameter("name");
String email = request.getParameter("email");
String tel = request.getParameter("tel");
HashMap<String, String> paraMap = new HashMap<String, String>();
paraMap.put("userid", userid);
paraMap.put("passwd", passwd);
paraMap.put("name", name);
paraMap.put("email", email);
paraMap.put("tel", tel);
int n = new MemberService().memberRegister(paraMap);
String result = "";
if (n == 1)
result = "회원가입 성공!!";
else
result = "회원가입 실패!!";
mv.addObject("result", result);
mv.setViewName("memberRegisterResult");
} catch (Exception e) {
mv.addObject("error", "회원가입도중 오류가 발생하였습니다");
mv.setViewName("error");
}
return mv;
}
}
테스트 클래스 수정했어요....포함여부가 달랐더라구요.
package com.sunit.verify.member;
import static org.junit.Assert.fail;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.queryParam;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
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.ResultActions;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import com.sunit.verify.member.service.MemberService;
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= {"file:src/main/webapp/WEB-INF/spring/root-context.xml"
,"file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml"})
public class MemberControllerTest {
private static final Logger logger = LoggerFactory.getLogger(MemberControllerTest.class);
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc=MockMvcBuilders.webAppContextSetup(this.wac).build();
logger.info("setup()완료~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
}
@Test
public void testMemberRegister() throws Exception {
//fail("Not yet implemented");
logger.info("===== testMemberRegister() 메소드 시작 =====");
try{
mockMvc.perform(
post("/beginSpring/memberRegister.action")
.param("userid", "leess")
.param("passwd","qwer1234$")
.param("name","이순신")
.param("email","leess@gmail.com")
.param("tel","01023456789"))
.andDo(print())
.andExpect(status().isOk());
logger.info(">>> 테스트 수행 성공!!<<< ");
}catch(Exception e) {
logger.info("테스트 수행 실패 : ",e.getMessage());
}
}
}
service의 메소드 본문 삭제......할 수도 없는데 구문이 있어서 에러였습니다...
package com.sunit.verify.member.service;
import java.util.HashMap;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class MemberService {
@Autowired
private SqlSession session;
public int memberRegister(HashMap<String, String> paraMap) {
//int result = session.insert("", paraMap);
return 1;
}
}
여기저기서 조금씩 오점이 있었습니다.
이렇게 결과가 잘 나왔습니다.....
실제 개발시 jsp파일 없이도 할수 있는 부분은 이렇게 할것 같네요^^