@SpringBootTest // spring 환경까지 포함해서 테스트.
@Transactional //이거는 @Test 함수 끝낸 후 날린 DB 쿼리를 롤백
class MemberServiceIntegrationTest {
@Autowired
MemberService memberService; //내가 테스트 하는 것 이므로 테스트는 편한 방법으로.
@Autowired
MemberRepository memberRepository;
@Test
void 회원가입() { //테스트때는 한국인 기업이면 한글로도 쓴다고 함.
//given 주어진 상황
Member member = new Member();
member.setName("hello2");
//when 실행했을 때, 검증
Long saveId = memberService.join(member); //동일 이름이 있을 시 예외 던짐. 아니면 제대로 memberRepository에 save 되고 id 반환
//then 결과, 검증 보통 거의 다 이렇게 됨. 모두 해당되는 건 아님. GWT
Member findedMember = memberService.findOne(saveId).get(); //.get()은 보통 테스트때에만 씀.
Assertions.assertThat(member.getName()).isEqualTo(findedMember.getName());
}
@Test
public void 중복_회원_예외(){
//given
Member member1 = new Member();
member1.setName("spring1");
Member member2 = new Member();
member2.setName("spring1");
//when
memberService.join(member1);
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2)); //assertThrows는 junit 함수. 예외를 반환.
//뒤의 람다식을 실행 시, 앞쪽의 예외를 throws해야 성공. 아니면 멈춤.
Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
// try{
// memberService.join(member2);
// fail(); //Junit의 에러 발생시키는 함수. 같은 이름이므로 예외 없이 정상적으로 작동하면 실패임.
// }catch (IllegalStateException e){
// Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
// }
//then
}
}
@SpringBootTest // spring 환경까지 포함해서 테스트.
@Transactional //이거는 @Test 함수 끝낸 후 날린 DB 쿼리를 롤백
@Transactional 이것때문에 기존의 메모리 테스트에서 List 지워주는 clear 같은 함수 안만들어도 됨.
기본적으로 spring 환경이 아닌 그냥 Test에서도 잘 되는 테스트각 좋은 테스트임.
'스프링 > 0. 입문, 전체방향' 카테고리의 다른 글
19강. JPA (0) | 2023.07.10 |
---|---|
18강. Jdbc 템플릿 (0) | 2023.07.09 |
16강. 순수 JDBC (0) | 2023.07.09 |
15강. H2 DB (0) | 2023.07.08 |
14강. 간단한 웹 기능 -조회 (0) | 2023.07.08 |