빙응의 공부 블로그
[Spring]단위 테스트 정리하기 JUnit(1/3) 본문
단위 테스트에 대해 다 까먹어서 다시 복습하는 겸 작성해보자
📝JUnit5
JUnit5는 자바 단위 테스트를 위한 테스트 프레임워크이다.
여기에 더해 AssertJ도 함께 사용하여 스프링에서 편하게 테스트가 가능하다.
📌AssertJ ??
// AssertJ를 사용한 Assertion
assertThat(actualValue).isEqualTo("hello")
AssertJ는 위 코드처럼 간단하고 가독성 좋은 코드를 지원한다.
📌[given/when/then 패턴]
- 요즘 단위테스트는 거의 given-when-then 패턴으로 작성하는 추세이다.
- 이 것은 단위 테스트를 3가지 단계로 나누어 처리하는 것으로 가독성을 향상시켜준다.
- given(준비): 어떠한 데이터가 준비되었을 때
- when(실행): 어떠한 함수를 실행하면
- then(검증): 어떠한 결과가 나와야 한다.
📝단위 테스트 작성하기
게시물 생성 코드
간단한 게시물 CRUD 코드로 테스트해보자
@Service
@RequiredArgsConstructor
public class BoardService {
private final BoardRepository boardRepository;
public List<Board> getAllBoards() {
return boardRepository.findAll();
}
public void createBoard(BoardFormDTO boardFormDTO) {
Board board = new Board();
board.setTitle(boardFormDTO.getTitle());
board.setContent(boardFormDTO.getContent());
boardRepository.save(board);
}
public Board updateBoard(Board board) {
return boardRepository.save(board);
}
public void deleteBoard(Long id) {
boardRepository.deleteById(id);
}
}
게시물 전체 조회하기
우선 조회 코드를 살펴보자
- given 단계에서 테스트할 게시물을 저장해주었고
- when 단계에서 조회를 해주었다.
- then 단계에서 사이즈와 타이틀을 통해 검사를 진행했다.
@Test
void getAllBoards_ShouldReturnAllBoards() {
// given
boardRepository.save(new Board("Title 1", "Content 1"));
boardRepository.save(new Board("Title 2", "Content 2"));
// when
List<Board> boards = boardService.getAllBoards();
// then
assertThat(boards).hasSize(2);
assertThat(boards.get(0).getTitle()).isEqualTo("Title 1");
assertThat(boards.get(1).getTitle()).isEqualTo("Title 2");
}
게시물 생성하기
- given 단계에서 when 단계 로직에 들어갈 DTO를 정의해줬다.
- when 단계에서 게시물을 생성해주고
- then 단계에서 검증해주었다.
@Test
void createBoard_ShouldSaveNewBoard() {
// given
BoardFormDTO dto = new BoardFormDTO();
dto.setTitle("New Title");
dto.setContent("New Content");
// when
boardService.createBoard(dto);
// then
List<Board> boards = boardRepository.findAll();
assertThat(boards).hasSize(1);
assertThat(boards.get(0).getTitle()).isEqualTo("New Title");
assertThat(boards.get(0).getContent()).isEqualTo("New Content");
}
나머지
모두 비슷한 맥락으로 진행하는 것을 알 수 있다.
void updateBoard_ShouldUpdateExistingBoard() {
// given
Board board = new Board("Old Title", "Old Content");
boardRepository.save(board);
// when
board.setTitle("Updated Title");
board.setContent("Updated Content");
Board updatedBoard = boardService.updateBoard(board);
// then
assertThat(updatedBoard.getTitle()).isEqualTo("Updated Title");
assertThat(updatedBoard.getContent()).isEqualTo("Updated Content");
}
@Test
void deleteBoard_ShouldRemoveBoard() {
// given
Board board = new Board("Title", "Content");
boardRepository.save(board);
Long boardId = board.getId();
// when
boardService.deleteBoard(boardId);
// then
assertThat(boardRepository.findById(boardId)).isNotPresent();
}
'Spring > 개인공부_이론' 카테고리의 다른 글
[Spring]단위 테스트 정리하기 Mockito 실습 (3/3) (2) | 2024.10.18 |
---|---|
[Spring]단위 테스트 정리하기 Mockito (2/3) (1) | 2024.10.18 |
[Spring API]Spring WebFlux와 WebClient (0) | 2024.05.24 |
[Spring]예외 처리 전략 (0) | 2024.03.29 |
JWT 개요 (0) | 2024.03.24 |