오늘은 Spring의 테스트 자동화 도구에 속하는
JUnit을 이용해 단위 테스트를 하는 법을 배웠다.
JUnit은 빨간 테두리안에 속해있는 두가지 폴더에서 진행할 수 있다.
src/test/java 폴더에 두개의 패키지를 생성 후, 클래스를 생성한다.
수업 시간에는 board(게시판)의 JUnit 테스트를 진행, notice(공지사항)의 JUnit 테스트는 각자가 진행해보기로 했다.
우선, 기본에 속하는 board(게시판)을 JUnit 테스트 하는 방법을 알아보자.
<BoardTest>
package com.webjjang.board;
import javax.inject.Inject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.webjjang.board.mapper.BoardMapper;
import com.webjjang.board.vo.BoardVO;
import com.webjjang.util.PageObject;
import lombok.extern.log4j.Log4j;
// test 실행 클래스 지정
@RunWith(SpringJUnit4ClassRunner.class)
// DB 설정 파일 지정 → URL과 상관없이 JAVA만으로 실행되므로 직접 지정해줘야한다.
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
// 로그 출력 객체
@Log4j
public class BoardTest {
// mapper 자동 DI
@Inject
private BoardMapper mapper;
// 설정과 자동 DI 테스트
@Test
public void testDI() {
log.info("────────────── 자동 DI 테스트 ──────────────");
log.info(mapper + "\n");
}
// 게시판 리스트 mapper 테스트
@Test
public void testList() throws Exception {
PageObject pageObject = new PageObject();
pageObject.setTotalRow(mapper.getTotalRow(pageObject));
log.info("────────────── 게시판 리스트 Mapper 테스트 ──────────────");
log.info(mapper.list(pageObject) + "\n");
}
// 게시판 글보기(- 글번호) 테스트
@Test
public void testView() throws Exception {
long no = 459;
log.info("────────────── 게시판 글보기 Mapper 테스트 ──────────────");
log.info(mapper.view(no) + "\n");
}
// 게시판 글쓰기(- 제목, 내용, 작성자 → vo) 테스트
@Test
public void testWrite() throws Exception {
BoardVO vo = new BoardVO();
vo.setTitle("테스트 진행");
vo.setContent("테스트 진행 중");
vo.setWriter("개발자");
log.info("────────────── 게시판 글쓰기 Mapper 테스트 ──────────────");
log.info(mapper.write(vo) + "\n");
}
// 게시판 글수정(- 번호, 제목, 내용, 작성자) 테스트
@Test
public void testUpdate() throws Exception {
BoardVO vo = new BoardVO();
vo.setNo(459);
vo.setTitle("Test 진행");
vo.setContent("테스트 진행 중");
vo.setWriter("개발자");
log.info("────────────── 게시판 글수정 Mapper 테스트 ──────────────");
log.info(mapper.update(vo) + "\n");
}
// 게시판 글삭제(- 글번호) 테스트
@Test
public void testDelete() throws Exception {
long no = 441;
log.info("────────────── 게시판 글삭제 Mapper 테스트 ──────────────");
log.info(mapper.delete(no) + "\n");
}
}
각 메소드마냥 테스트를 하기 위해서는, 어떤 데이터가 필요한지가 중요한거 같다.
@Test 어노테이션을 입력해야, 테스트를 진행하고 콘솔에 log 값이 찍힌다.
<NoticeTest>
package com.webjjang.notice;
import java.util.Date;
import javax.inject.Inject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.webjjang.notice.mapper.NoticeMapper;
import com.webjjang.notice.vo.NoticeVO;
import com.webjjang.util.PageObject;
import lombok.extern.log4j.Log4j;
// test 실행 클래스 지정
@RunWith(SpringJUnit4ClassRunner.class)
// DB 설정 파일 지정
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
// 로그 출력 객체
@Log4j
public class NoticeTest {
// mapper 자동 DI
@Inject
private NoticeMapper mapper;
// 설정과 자동 DI 테스트
@Test
public void testDI() {
log.info("─────────────────── 자동 DI 테스트 ───────────────────");
log.info(mapper + "\n");
}
// 공지사항 리스트 mapper 테스트
@Test
public void testList() throws Exception {
PageObject pageObject = new PageObject();
pageObject.setTotalRow(mapper.getTotalRow(pageObject));
log.info("─────────────────── 공지사항 리스트 mapper 테스트 ───────────────────");
log.info(mapper.list(pageObject) + "\n");
}
// 공지사항 글보기(:글번호) 테스트
@Test
public void testView() throws Exception {
long no = 43;
log.info("─────────────────── 공지사항 글보기 mapper 테스트 ───────────────────");
log.info(mapper.view(no) + "\n");
}
// 공지사항 글쓰기(:제목, 내용, 시작일, 종료일) 테스트
@SuppressWarnings("deprecation")
@Test
public void testWrite() throws Exception {
NoticeVO vo = new NoticeVO();
vo.setTitle("3월 11일 공지사항");
vo.setContent("3월 11일 공지사항");
vo.setStartDate(new Date(2022, 03, 11));
vo.setEndDate(new Date(2022, 03, 31));
log.info("─────────────────── 공지사항 글쓰기 mapper 테스트 ───────────────────");
log.info(mapper.write(vo) + "\n");
}
// 공지사항 글수정(:글번호, 제목, 내용, 시작일, 종료일, 수정일) 테스트
@SuppressWarnings("deprecation")
@Test
public void testUpdate() throws Exception {
NoticeVO vo = new NoticeVO();
vo.setNo(43);
vo.setTitle("3월 11일 금요일 공지사항");
vo.setContent("3월 11일 금요일 공지사항");
vo.setStartDate(new Date(2022, 03, 11));
vo.setEndDate(new Date(2022, 03, 31));
log.info("─────────────────── 공지사항 글수정 mapper 테스트 ───────────────────");
log.info(mapper.update(vo) + "\n");
}
// 공지사항 글삭제(:글번호) 테스트
@Test
public void testDelete() throws Exception {
long no = 41;
log.info("─────────────────── 공지사항 글삭제 mapper 테스트 ───────────────────");
log.info(mapper.delete(no) + "\n");
}
}
notice(공지사항)게시판은 일반 게시판과 다르게
VO 객체 생성시, 시작일ㆍ종료일을 Date 타입으로 생성했기 때문에 String 값을 넣게 되면 오류가 발생한다.
그래서, 위와 같이 코드를 작성하고 @SuppressWarnings 어노테이션을 이용해 오류를 잡아주는것이 바람직하다.
처음에는 이 오류 때문에 Date 타입을 String 타입으로 변환하려면 어떻게 해야하나
구글링 해봤는데, 타입 변환보다는 이 방법이 훨씬 더 깔끔해져서 이 방법을 선택했다.
코드가 완성 되었으면, Run As - JUnit Test을 이용해 테스트를 진행해본다.
테스트를 진행하면 Console 창에 위와 같이 테스트 결과 값이 잘 나온다.
글쓰기, 삭제, 수정 같은 데이터의 변동 값이 있는 경우에는 1과 0으로 표시되는데
실행이 되었으면 1, 그렇지 않으면 0이다.
만약 없는 글 번호를 선택해 글 삭제를 테스트 한다면 결과값은 0이 나오게 된다.
'BACK-END > SPRING' 카테고리의 다른 글
[Spring]회원가입 폼 만들기 (0) | 2022.03.14 |
---|---|
[Spring]AOP (0) | 2022.03.12 |
[Spring]Spring-MyBatis를 이용해 공지사항 게시판 만들기 (0) | 2022.03.02 |
[Spring]Spring-MyBatis를 이용해 게시판 만들기 (0) | 2022.02.27 |
[Spring]Maven, lombok, 게시판 만들기 (0) | 2022.02.21 |
댓글