[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);
}
컨트롤러 작성은 파라미터에 좀 신경쓰면 어려울 것 없는 것 같은데 테스트 코드가 너어무 어렵다. 죄다 함수가 무슨 왜 이렇게 많고 길ㅇ ㅓ…왜….
끝!
댓글남기기