스프링/0. 입문, 전체방향

17강. spring 종합 테스트

sdafdq 2023. 7. 9. 17:15
@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