테스트 요구사항
회원가입 성공
회원가입 시 같은 이름이 있을 시 예외 발생
@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
여기 보면 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 |