Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 알고리즘
- Thymeleaf
- jpa
- 그리디
- Greedy
- http
- db
- springdatajpa
- 스프링 핵심 원리
- JDBC
- transaction
- JPQL
- Proxy
- 김영한
- 스프링 핵심 기능
- pointcut
- Android
- spring
- kotlin
- java
- SpringBoot
- 자바
- 스프링
- Servlet
- AOP
- 백준
- 인프런
- QueryDSL
- Spring Boot
- Exception
Archives
- Today
- Total
개발자되기 프로젝트
회원 기능 테스트 본문
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
'인프런 > [인프런] 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