Spring

회원 도메인 개발

date
Oct 18, 2023
slug
스프링부트-JPA-활용1-4
status
Public
tags
실전! 스프링 부트와 JPA 활용 1
author
summary
[실전! 스프링 부트와 JPA 활용 1] 섹션 4 강의 정리
type
Post
thumbnail
updatedAt
May 28, 2024 12:34 PM
category
Spring
김영한
인프런

🍯 꿀팁


 

📝 강의 정리


테스트 코드 작성 시 @Transactional


코드

@RunWith(SpringRunner.class) @SpringBootTest @Transactional public class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Autowired EntityManager em; @Test @DisplayName("회원가입") @Rollback(false) public void 회원가입() throws Exception { //given Member member = new Member(); member.setName("김"); //when Long saveId = memberService.join(member); //then em.flush(); assertEquals(member, memberRepository.findOne(saveId)); } }

[1]. @Transactinal만 선언 시

  • 터미널 출력
    • notion image
 
→ 실제 insert문 실행이 안되는 것으로 확인된다.
 
  • 회원 테이블
notion image
  • Rolled back transaction for test: 스프링단에서 롤백되므로, flush되지 않음.
 

[2]. Rollback(false) or em.flush()

  • 실제 insert문이 실행하는 과정을 보고 싶으면,
      1. @Rollback(false) 어노테이션
          • 롤백하지 않으므로, DB에 데이터가 남게 됨
      1. EntityManager 선언 후, em.flush();
          • flush로 em이 insert 쿼리는 날리지만, 이후 롤백으로 인해 DB에 데이터가 남지 않음
 

격리된 데이터베이스를 테스트 환경에서 사용하기 ( H2DB )


[1]. src/test 디렉터리 하위에 resources/~.yml 생성

  • test 코드 실행 시, 해당 yml이 우선권을 가진다.

[2]. 데이터베이스 url 변경

  • url: jdbc:h2:mem:test
 

📎 출처