Controller JUnit으로 테스트하기2

hanahana·2022년 11월 14일

Spring 학원수강

목록 보기
45/45
post-thumbnail

controller에서 insert하는 메소드를 테스트 해보자

Controller메소드

@RequestMapping(value = "/member/register.kh", method = RequestMethod.POST)
	public ModelAndView memberJoin(@ModelAttribute Member member, @RequestParam("post") String post,
			@RequestParam("address1") String memberAddress1,
			@RequestParam("address2") String memberAddress2,
			ModelAndView mv) {

		member.setMemberAddress(post + "," + memberAddress1+ ","+memberAddress2);

		try {
			int result = mService.registerMember(member);
			if (result > 0) {

				mv.setViewName("redirect:/home.kh");
			} else {
				mv.addObject("msg", "회원가입 실패");
				mv.setViewName("common/errorPage");

			}
		} catch (Exception e) {
			mv.addObject("msg", e.getMessage());
			mv.setViewName("common/errorPage");

		}
		return mv;

	}
  • 컨트롤러는 이렇게 구성되어있다.
    1. html영역에서 아이디, 이름, 비밀번호, 이메일, 전화번호를 Member에 저장해서 가져온다.
    1. 주소는 따로 입력받아 그 입력받은값을 Member의 인스탠스에 저장해 service 클래스로 넘긴다.
  • 이 2가지의 값이 잘 받아져서 insert되는지 테스트 할 것이다.

테스트 클래스

@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml",
		"file:src/main/webapp/WEB-INF/spring/root-context.xml"})
public class MemberContollerTest {
	
	@Autowired
	private WebApplicationContext wac;
	private MockMvc mocMvc;
	
	@Before
	public void setUp() {
		this.mocMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
	}
	
	@Test
	public void testMemberRegist() throws Exception {
		Member member =new Member();
		member.setMemberId("user11");
		member.setMemberPw("pass11");
		member.setMemberName("십일용자");
		member.setMemberEmail("user11@user.com");
		member.setMemberPhone("1111111");
		
		try {
			mocMvc.perform(
					post("/member/register.kh")
					.flashAttr("member", member)
					.param("post","1234")
					.param("address1","123123")
					.param("address2","123123")

					).andDo(print()).andExpect(status().isOk());
		}catch (Exception e) {
			// TODO: handle exception
		}
	
	}
	

}
  • 웹에서 받는 값을 테스트 하기 때문에 어노테이션을 잘 적어주어야 한다.

    @WebAppConfiguration
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml",
            "file:src/main/webapp/WEB-INF/spring/root-context.xml"})
      
  • root-context와 servlet-context의 주소를 잘 적어준다.

  • runWith는 항상 필요하다

  • 웹이기때문에 WebAppconfiguation을 써줘야한다.

    @Autowired
        private WebApplicationContext wac;
        private MockMvc mocMvc;
    
        @Before
        public void setUp() {
            this.mocMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
        }
  • mocMvc를 미리 정의한다.

  • .flashAttr("member", member) 클래스를 매개변수로 받을경우 flashAttr을 써줘서 전달한다.

  • .param("post","1234")으로 입력받은 매개변수값을 전달한다.

테스트 결과

MockHttpServletRequest:
HTTP Method = POST
Request URI = /member/register.kh
Parameters = {post=[1234], address1=[123123], address2=[123123]}
Headers = []
Body =
Session Attrs = {}

Handler:
Type = com.kh.junspring.member.controller.MemberController
Method = com.kh.junspring.member.controller.MemberController#memberJoin(Member, String, String, String, ModelAndView)

Async:
Async started = false
Async result = null

Resolved Exception:
Type = null

ModelAndView:
View name = redirect:/home.kh
View = null
Attribute = member
value = Member [memberId=user11, memberPw=pass11, memberName=십일용자, memberEmail=user11@user.com, memberPhone=1111111, memberAddress=1234,123123,123123]
errors = []
Attribute = modelAndView
value = ModelAndView [view="redirect:/home.kh"; model={}]
errors = []

FlashMap:
Attributes = null

MockHttpServletResponse:
Status = 302
Error message = null
Headers = [Content-Language:"en", Location:"/home.kh"]
Content type = null
Body =
Forwarded URL = null
Redirected URL = /home.kh
Cookies = []

profile
hello world

0개의 댓글