-
회원 가입, 조회 기능 테스트JPA/JPA 활용 2023. 7. 11. 18:09
테스트코드에서 service의 기능들을 테스트해 볼 것이다.
@RunWith(SpringRunner.class) // 스프링이랑 같이 엮어서 junit을 실행하는 것 @SpringBootTest // 스프링부트를 띄운 상태로 테스트(이게 없으면 Autowired가 다 실패) @Transactional // 트랜잭션 class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test public void 회원가입() throws Exception { // given Member member = new Member(); member.setName("kim"); // when Long savedId = memberService.join(member); // then // em.flush(); -> 롤백을 하지만 db에 쿼리를 날려서 insert문 보는 것 Assert.assertEquals(member, memberRepository.findOne(savedId)); }
애노테이션과 회원가입의 테스트 메서드이다. 회원가입을 해서 name을 지정하고 Assert.assertEquals로 member와 repository에 저장되어있는 savedId로 조회한 member가 서로 동일하다는 것을 확인했다.
@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("예외가 발생해야 한다."); } }
다음은 중복 회원이 있을 시에 예외처리를 해주는지 확인해주는 테스트 케이스이다. member1과 member2를 이름이 같게 만들고나서 join을 한 다음에 try-catch로 IllegalStateException 예외처리를 해준다.
메모리에서 테스트 진행하기
h2 데이터베이스를 끈 다음에도 메모리에서만 테스트를 진행하는 방법이 있다.
spring: datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: # show_sql: true format_sql: true logging.level: org.hibernate.SQL: debug # org.hibernate.type: trace #스프링 부트 2.x, hibernate5 # org.hibernate.orm.jdbc.bind: trace #스프링 부트 3.x, hibernate6
원래는 application.yml에서 url을 h2데이터베이스의 주소로 설정해두었는데, main의 application.yml이 아니라 test의 application.yml에서 저 url 주소를 jdbc:h2:mem:test(h2 페이지 참고)로 바꾸면 된다.
spring: logging.level: org.hibernate.SQL: debug org.hibernate.type: trace
스프링 부트는 다 생략을 해도 자동으로 메모리모드에서 테스트를 한다고 한다.
main과 test의 application.yml을 분리해서 main에도 test에도 같은 application.yml 파일을 만드는 것이 좋다.
'JPA > JPA 활용' 카테고리의 다른 글
상품 리포지토리, 서비스 개발 (0) 2023.07.11 상품 엔티티 개발(비즈니스 로직) (0) 2023.07.11 회원 리포지토리, 서비스 개발 (0) 2023.07.11 엔티티 설계시 주의점 (0) 2023.07.11 회원 도메인 개발 (0) 2023.07.11