[spring] 프레젠테이션(웹) 계층 CRUD 복습

업데이트:



BoardController 생성

컨트롤러


package org.example.controller;

import org.example.service.BoardService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j;

@Controller
@Log4j
@RequestMapping("*/board/*")
@AllArgsConstructor
public class BoardController {
	private BoardService service;
	
	
}





목록 구현과 테스트

  • BoardController
@GetMapping("/list")
public void list(Model model) {
    log.info("list");
    model.addAttribute("list", service.getList());
}


  • BoardControllerTests
package org.example.controller;

//(생략)

@RunWith(SpringJUnit4ClassRunner.class)
@Log4j
@WebAppConfiguration
@ContextConfiguration({
	"file:src/main/webapp/WEB-INF/spring/root-context.xml",
	"file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml"})
public class BoardControllerTests {
	
	@Setter(onMethod_ = {@Autowired})
	private WebApplicationContext ctx;
	private MockMvc mockMvc;
	
	@Before
	public void setup() {
		this.mockMvc = MockMvcBuilders.webAppContextSetup(ctx).build();
	}
	
	@Test
	public void testList() throws Exception {
		log.info(
				mockMvc.perform(MockMvcRequestBuilders.get("/board/list"))
				.andReturn()
				.getModelAndView()
				.getModelMap());
	}
}

목록테스트로그





등록 구현과 테스트

  • BoardController
@PostMapping("/register")
public String register(BoardVO board, RedirectAttributes rttr) {
    log.info("register");
    service.register(board);
    rttr.addFlashAttribute("result", board.getBno());
    return "redirect:/board/list";
}


  • BoardControllerTests

테스트를 작성하다가 에러가 떴다.
등록테스트로그오류

로그를 잘 살펴보니 부적합한 열 유형이라 써있길래 봤더니 물음표 4번(PreparedStatement)가 원래 작성자 자리인데 setNull이 떠있었다. 그래서 다시 코드를 보니 오타를 발견,,, 고쳤더니 정상적으로 실행!

@Test
public void testRegister() throws Exception{
    String resultPage = mockMvc.perform(MockMvcRequestBuilders.post("/board/register")
            .param("title", "테스트 새 글 제목")
            .param("content", "테스트 새 글 내용")
            .param("writer", "새글테스트")
            ).andReturn().getModelAndView().getViewName();
    
    log.info(resultPage);
}

등록테스트로그





조회 구현과 테스트

  • BoardController
@GetMapping("/get")
public void get(@RequestParam("bno") Long bno, Model model) {
    log.info("/get");
    model.addAttribute("board", service.get(bno));
}


  • BoardControllerTests
@Test
public void testGet() throws Exception{
    log.info(
            mockMvc.perform(MockMvcRequestBuilders.get("/board/get")
                    .param("bno", "1"))
                    .andReturn()
                    .getModelAndView().getModelMap());
}

조회테스트로그





수정 구현과 테스트

  • BoardController
@PostMapping("/modify")
public String modify(BoardVO board, RedirectAttributes rttr) {
    log.info("modify" + board);
    if(service.modify(board)) {
        rttr.addFlashAttribute("result", "success");
    }
    return "redirect:/board/list";
}


  • BoardControllerTests
@Test
public void testModify() throws Exception{
    String resultPage = mockMvc.perform(MockMvcRequestBuilders.post("/board/modify")
            .param("bno", "1")
            .param("title", "수정되었습니다만?")
            .param("content", "수정했다구요")
            .param("writer", "수정작성자쓰"))
        .andReturn().getModelAndView().getViewName();
    
    log.info(resultPage);
}

수정테스트로그





삭제 구현과 테스트

  • BoardController
@PostMapping("/remove")
public String remove(@RequestParam("bno") Long bno, RedirectAttributes rttr) {
    log.info("remove" + bno);
    
    if(service.remove(bno)) {
        rttr.addFlashAttribute("result", "success");
    }
    
    return "redirect:/board/list";
}


  • BoardControllerTests
@Test
public void testRemove() throws Exception{
    String resultPage = mockMvc.perform(MockMvcRequestBuilders.post("/board/remove")
            .param("bno", "3")).andReturn().getModelAndView().getViewName();
    
    log.info(resultPage);
}

삭제테스트로그



컨트롤러 작성은 파라미터에 좀 신경쓰면 어려울 것 없는 것 같은데 테스트 코드가 너어무 어렵다. 죄다 함수가 무슨 왜 이렇게 많고 길ㅇ ㅓ…왜….

끝!

태그:

카테고리:

업데이트:

댓글남기기