2021.08.06 - [Develop/Back-End] - [Spring Boot] 단위 테스트 코드를 작성해보자 (1)
[Spring Boot] 단위 테스트 코드를 작성해보자 (1)
⊙ TDD? 단위 테스트 코드? TDD란? Test-driven development의 약자로 테스트가 주도하는 소프트웨어 개발 프로세스를 의미한다. 기존에 디자인 - 코드 작성 - 테스트의 순서에서 벗어나 디자인 단계를 미
chocochip101.tistory.com
⊙테스트 코드를 통한 CRUD 연습
JPA Repository를 활용하여 테이블에 SQL 없이 CRUD를 테스트해보겠습니다.
- insert 작업: save(엔티티 객체)
- select 작업: findById(키 타입)
- update 작업: save(엔티티 객체)
- delete 작업: deleteById(키 타입), delete(엔티티 객체)
JPA는 위와 같은 메서드를 활용하는데, 특이하게도 insert와 update 작업에 같은 메서드가 사용됩니다. 이는 JPA의 구현체가 메모리상에서 객체를 비교하여 존재하지 않다면 insert, 존재한다면 update를 진행합니다.
⊙ 등록 작업
@Test
public void testInsertDummies(){
IntStream.rangeClosed(1, 100).forEach(
i -> {
Memo memo = Memo.builder().memoText("Sample..." + i).build();
memoRepository.save(memo);
}
);
}
자바 8 이후에 추가된 Stream과 lambda 식을 이용하여 save 메서드를 활용하여 등록 작업을 진행합니다.
다음과 같이 DDL이 생성되고 DB에 추가된것을 알 수 있습니다.
⊙ 조회 작업
@Test
public void testSelect(){
Long mno = 100L;
Optional<Memo> result = memoRepository.findById(mno);
System.out.println("===============================");
if(result.isPresent()){
Memo memo = result.get();
System.out.println(memo);
}
}
findById 메서드를 통해 조회 작업을 진행합니다. findById 메서드는 반환 타입이 Optional이기 때문에 한번 더 결과가 존재하는지 체크하는 형태로 작성됩니다.
무난하게 select문이 실행된것을 볼 수 있습니다.
⊙ 수정 작업
@Test
public void testUpdate(){
Memo memo = Memo.builder().mno(101L).memoText("Update Text").build();
System.out.println(memoRepository.save(memo));
}
testUpdate()에서 101번의 Memo 객체를 만들고, save()를 호출합니다. 내부적으로 select 쿼리로 해당 번호의 Memo 객체를 확인하고, 이를 update 합니다.
즉, JPA는 엔티티 객체들은 메모리상에 보관하려고 하기 때문에 특정한 엔티티 객체가 존재하는지 확인하는 select가 먼저 실행되고 해당 @Id를 가진 엔티티 객체가 있다면 update, 그렇지 않으면 insert를 실행하게 됩니다.
⊙ 삭제 작업
@Test
public void testDelete(){
Long mno = 101L;
memoRepository.deleteById(mno);
}
삭제하려는 번호(mno)의 엔티티 객체가 있는지 확인하고, 데이터가 존재하지 않으면 org.springframework.dao.EmptyResultDataAccessException 예외를 발생합니다.
'Develop > Back-End' 카테고리의 다른 글
[Back-End] Node.js 첫걸음 (0) | 2022.05.12 |
---|---|
[Spring Boot] 단위 테스트 코드를 작성해보자 (1) (0) | 2021.08.06 |
[DialogFlow] What is DialogFlow? (0) | 2021.07.30 |
[Git] Git 벼락치기! - 초심자 가이드 (0) | 2021.07.09 |
[Spring Boot] RESTful Web Service 구축하기 (0) | 2021.06.05 |
댓글