스프링데이터 + JPA/웹 애플리케이션 개발

14. 회원 테스트

sdafdq 2023. 11. 6. 12:29

테스트 요구사항

회원가입 성공

회원가입 시 같은 이름이 있을 시 예외 발생

 

@SpringBootTest
@Transactional
class MemberServiceTest {
    @Autowired
    MemberService memberService;
    @Test
    public void 회원가입(){
        Member member = new Member();
        member.setName("memberA");

        Long savedMemberId = memberService.join(member);

        Member findMember = memberService.findOne(savedMemberId);

        assertThat(member).isEqualTo(findMember);
    }

    @Test
    public void 중복_회원_예외(){

    }
}

@Test에서의 @Transactional은 롤백해버림.

그래서 insert 쿼리문 자체가 나가지 않는데, 만약 보고 싶다면

@Rollback(false) 옵션 주면 됨.

 

객체 자체를 isEqualTo 해도 같다고 나오는 이유는,

같은 트랜잭션이기 때문에 조회하면 DB에서 조회해오기 전에 먼저 영속성 컨텍스트에서 찾아온다. (id가 같으면. em.find())

그래서 같은 주소이다.

근데 이상하게 select 쿼리가 나간다.

https://www.inflearn.com/questions/1067582

 

 

일단 근데, 테스트를 메모리 모드에서 하자.

https://www.h2database.com/html/cheatSheet.html

 

H2 Database Engine

Using H2 Documentation Reference: SQL grammar, functions, data types, tools, API Features: fulltext search, encryption, read-only (zip/jar), CSV, auto-reconnect, triggers, user functions Embedded jdbc:h2:~/test 'test' in the user home directory jdbc:h2:/da

www.h2database.com

 

여기 보면 in-memory 모드로 하는 법.

저걸 db주소로 하면 된다.

 

test에 resource 패키지 만들고 거기에 yml 복붙. 그럼 test 할 때는 이 파일이 우선권

거기서 db 주소만 바꿔주면 됨.

 

근데 사실, db에 아무 설정안해줘도 스프링에선 기본이 메모리db임.

그래서 db 설정 자체를 사실 안해줘도 됨.

 

 

@Test
public void 중복_회원_예외(){
    Member member1 = new Member();
    member1.setName("kim1");
    Member member2 = new Member();
    member2.setName("kim1");

    memberService.join(member1);
    assertThatThrownBy(()->memberService.join(member2))
            .isInstanceOf(IllegalStateException.class);
}

중복 테스트

그냥 똑같은 이름으로 join을 시도 할 시, 예외가 떠야 함.

 

 

'스프링데이터 + JPA > 웹 애플리케이션 개발' 카테고리의 다른 글

16. 주문 도메인 개발  (0) 2023.11.07
15. 상품 개발  (0) 2023.11.07
13. 회원 서비스  (0) 2023.11.06
12. 회원 리포지토리  (0) 2023.11.06
11. 애플리케이션 아키텍처  (0) 2023.11.05