이전 글에서 연결시킨 CRUD가
2023.11.28 - [백엔드(Back-End)/Spring Boot] - [sts4-Spring Boot] 04. CRUD Test 작성
잘 동작하는지 테스트할 차례이다.
그래서 src/메인/자바 or src/메인/리소스 디렉토리보다 src/테스트/자바를 건드릴 일이 많다.
잘 매핑이 되었는지 확인할 것이므로
테스트 디렉토리의 com.프로젝트명 패키지에 테스트 클래스를 만들어주자.
(src/main/java와 똑같이 com.프로젝트명 패키지가 있으므로 헷갈릴 수 있으니 조심하자...)
각 기능이 잘 되는지 단위테스트를 해볼 것인데,
이를 스프링에 인식시켜주도록 @SpringBootTest 어노테이션을 적어준다.
먼저 게시글을 작성하는 기능을 테스트해보자.
@Autowired를 통해 Mapper 인터페이스 Bean 주입
테스트 메서드에서는 매개변수, 반환타입을 잘 적어줘야 하는데
이는 sql문을 적었던 sc/리소스/자바의 Mapper.xml파일이나
메서드들을 다 정의했던 src/메인/자바 > mapper 패키지의 Mapper.java를 보면서 적으면 된다.
게시글을 작성하는 메서드를 insertBoard라고 정의
-> @Test public void testOfInsert() {
매개변수는 도메인 패키지의 BoardDTO 객체
-> BoardDTO params = new BoardDTO();
반환은 성공/실패만 판단하는 용도인 int형
-> int result = boardMapper.insertBoard(params);
테이블의 컬럼에 각각의 value를 넣을 것이므로
DTO에서 작성한 setter 함수를 이용하여 java에서 입력한 컬럼과 db의 컬럼을 잘 연결시켜주자.
이를 정리하면 다음과 같다.
package com.board;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.util.CollectionUtils;
import com.board.domain.BoardDTO;
import com.board.mapper.BoardMapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
@SpringBootTest
public class MapperTests {
@Autowired
private BoardMapper boardMapper;
@Test
public void testOfInsert() {
BoardDTO params = new BoardDTO();
params.setTitle("1번 게시글 제목");
params.setContent("1번 게시글 내용");
params.setWriter("테스터");
int result = boardMapper.insertBoard(params);
System.out.println("결과는 " + result + "입니다.");
}
}
메서드를 작성하고
메서드명을 드래그하여 오른쪽클릭>Run As > Junit으로 실행한다.
잘 작동이 됐다면 "결과는 1입니다"라는 텍스트만 문구에 뜨고 글 제목, 내용, 작성자는 뜨지 않는다.
또한, 데이터베이스에 잘 반영이 됐는지 확인해보자.
다른 기능들도 똑같은 방식으로 작성하여 테스트하면 된다.
// 게시글 조회 기능 테스트
@Test
public void testOfSelectDetail() {
// DTO 타입 객체 변수인 board에 메서드 결과 저장
// long 1은 1번 게시글 조회위한 기본키 인덱스 값
BoardDTO board = boardMapper.selectBoardDetail((long) 1);
try {
String boardJson = new ObjectMapper().registerModule(new JavaTimeModule()).writeValueAsString(board);
System.out.println("==============================");
// Jackson 라이브러리 통해 JSON 문자열 변경하여 출력
System.out.println(boardJson);
System.out.println("==============================");
} catch(JsonProcessingException e) {
e.printStackTrace();
}
}
// 게시글 수정 기능 테스트
@Test
public void testOfUpdate() {
BoardDTO params = new BoardDTO();
params.setTitle("1번 게시글 제목을 수정합니다.");
params.setContent("1번 게시글 내용을 수정합니다.");
params.setWriter("홍길동");
params.setIdx((long) 1);
int result = boardMapper.updateBoard(params);
if (result == 1) {
BoardDTO board = boardMapper.selectBoardDetail((long) 1);
try {
String boardJson = new ObjectMapper().registerModule(new JavaTimeModule()).writeValueAsString(board);
System.out.println("==========================");
System.out.println(boardJson);
System.out.println("==========================");
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
// 게시글 삭제 기능 테스트
@Test
public void testOfDelete() {
int result = boardMapper.deleteBoard((long) 1);
// delete_yn이 1로 잘 변경됐다면, 결과는 성공이므로 1
if (result == 1) {
BoardDTO board = boardMapper.selectBoardDetail((long) 1);
try {
String boardJson = new ObjectMapper().registerModule(new JavaTimeModule()).writeValueAsString(board);
System.out.println("==========================");
System.out.println(boardJson);
System.out.println("==========================");
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
// 여러 행 추가하는 용도
@Test
public void testOfMultiple() {
BoardDTO params = new BoardDTO();
for (int i = 0; i < 50; i++) {
params.setTitle(i+"번 게시글 제목");
params.setContent(i+"번 게시글 내용");
params.setWriter(i+"번 테스터");
int result = boardMapper.insertBoard(params);
System.out.println("결과는 " + result + "입니다.");
}
}
// 게시글 목록 조회 기능 테스트
@Test
public void testSelectedList() {
// 삭제 안 된 게시글 수 카운팅
int boardTotalCount = boardMapper.selectBoardTotalCount();
if (boardTotalCount > 0) {
List<BoardDTO> boardList = boardMapper.selectBoardList();
// boardList가 안 비어있는지 체크
if(CollectionUtils.isEmpty(boardList) == false) {
for (BoardDTO board : boardList) {
System.out.println("==========================");
System.out.println(board.getTitle());
System.out.println(board.getContent());
System.out.println(board.getWriter());
System.out.println("==========================");
}
}
}
}
'백엔드(Back-End) > Spring Boot' 카테고리의 다른 글
[sts4-Spring Boot] 06. Layout (Presentation Layer - 컨트롤러 처리) (0) | 2023.11.30 |
---|---|
[sts4-Spring Boot] 05. Layout (Business Layer - 서비스 영역 처리) (0) | 2023.11.29 |
[sts4-Spring Boot] 03. 데이터베이스 CRUD (0) | 2023.11.28 |
[스프링부트] main 실행하기 (1) | 2023.11.26 |
[스프링부트] 프로젝트 생성 옵션 spring initializr (1) | 2023.11.26 |