Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

회원 기능 테스트 본문

인프런/[인프런] Springboot와 JPA활용 1

회원 기능 테스트

Seung__ 2021. 8. 6. 02:21

1. 테스트 요구사항


  • 회원가입을 성공한다
  • 회원가입할 대 같은 이름이 있으면 예외발생!

 

2. 회원 가입 테스트


  • @SpringBootTest, @RunWith --> Springboot띄우기 위해 필요(Junit4 기준)
  • @Transactional : 반복적이고 독립적인 test를 위해 rollback
@SpringBootTest
@RunWith(SpringRunner.class)
@Transactional //rollback
public class MemberServiceTest {

    @Autowired MemberService memberService;
    @Autowired MemberRepository memberRepository;

    @Test
    public void 회원가입() throws Exception{
        //given
        Member member = new Member();
        member.setName("memberA");

        //when
        Long savedId = memberService.join(member);

        //then
        //둘이 같음?
        assertEquals(member, memberRepository.findOne(savedId));
    }

}

 

3. 회원 가입 테스트 결과


  • insert 쿼리가 없다?
  • persist한다고 DB에 반영되는 것은 아님.
  • flush가 되어야 DB에 반영됨.
  • Test의 @Transactional은 commit 안하고 rollback해버림.
  • flush 시키고 싶으면 EntityManager  주입받고 em.flush()하면 됨.
  • 그리고 rollback함.
    select
        member0_.member_id as member_i1_4_,
        member0_.city as city2_4_,
        member0_.street as street3_4_,
        member0_.zipcode as zipcode4_4_,
        member0_.name as name5_4_ 
    from
        member member0_ 
    where
        member0_.name=?

 

4. 중복 회원 예외 테스트


  • 예외가 터져야 테스트 성공!
  @Test
    public void 중복_회원_예외() throws Exception{
        //given
        Member member1 = new Member();
        member1.setName("kim");

        Member member2 = new Member();
        member2.setName("kim");
        //when
        memberService.join(member1);
        try{
            memberService.join(member2); //예외발생해야해.
        } catch (IllegalStateException e){
            return;
        }

        //then
        Assert.fail("예외가 발생해야 한다."); //여기 그대로 오면 fail임!
    }
  • try-catch너무 귀찮은데..
    - @Test(expected = type)
      @Test(expected = IllegalStateException.class)
        public void 중복_회원_예외() throws Exception{
            //given
            Member member1 = new Member();
            member1.setName("kim");
    
            Member member2 = new Member();
            member2.setName("kim");
            
            //when
            memberService.join(member1);
            memberService.join(member2); //예외발생해야해.
    
            //then
            Assert.fail("예외가 발생해야 한다."); //여기 그대로 오면 fail임!
        }

 

 

 

5. Test를 완전히 격리된 환경. 메모리 DB 활용


  • Test/resources에 application.yml이 있으면 main/resources에 있는 파일보다 우선권 있음.

 

  • h2 DB를 사용하고 있으면. JVM에 띄울 수 있음.
 runtimeOnly 'com.h2database:h2'
  • H2를 memory 모드로 띄울 수 있도록 datasource의 url을 변경!
    spring:
      datasource:
        url: jdbc:h2:mem:test
        username: sa
        driver-class-name: org.h2.Driver​

오..

log를 봐도 메모리 DB에서 가져오는걸 볼 수 있음!

2021-08-06 02:14:01.330  INFO 2768 --- [    Test worker] p6spy 
: #1628183641330 | took 0ms | statement | connection 4| url jdbc:h2:mem:test
  • 그리고 스프링 부트는 기본 설정이 없으면 메모리 모드로 돌려버림.. ㅋㅋㅋ
    - 이래도 돌아감.
    메모리 DB로 돌아가는걸 볼 수 있음 ㅋㅋㅋㅋ 대단
  • 2021-08-06 02:18:04.682 INFO 9380 --- [ Test worker] p6spy : #1628183884682 | took 0ms | statement | connection 5| url jdbc:h2:mem:ef31a077-30a5-404b-a9d9-861843da68e5​

6. ddl-auto


  • Test는 기본적으로 create-drop으로 진행됨.
  • application 종료시점에 drop해버림. 자원정리 깔끔.

 

 

7. GitHub : 210806 Member Test


 

GitHub - bsh6463/SpringBootJPA1

Contribute to bsh6463/SpringBootJPA1 development by creating an account on GitHub.

github.com

 

'인프런 > [인프런] Springboot와 JPA활용 1' 카테고리의 다른 글

주문 도메인 개발  (0) 2021.08.06
상품 domain, repository, service개발  (0) 2021.08.06
MemberService 개발  (0) 2021.08.06
회원 도메인 개발  (0) 2021.08.06
엔티티 설계 시 주의점  (0) 2021.08.06
Comments