본문 바로가기
개발자 공부 - 인프런 온라인 강의/스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[섹션 6. 스프링 DB 접근 기술] 스프링 통합 테스트 / 인프런 김영한 스프링 입문

by easpop 2023. 2. 2.
728x90
반응형

이번 시간에는 스프링을 올리고 DB까지 연결해서 동작하는 통합 테스트를 하였다.

 

MemberServiceTest 했던 파일을 복사 붙여넣기 하고 MemberServiceIntegrationTest 클래스를 생성한다.

 

SpringBootTest 어노테이션을 추가하게 되면 스프링 컨테이너와 테스트를 함께 실행한다.

그리고 Transactional 어노테이션도 추가~~

 

Transactional 어노테이션에 대해서 설명하자면,

테스트는 반복을 할 수 있어야 되는데 Transactional 어노테이션이 없이 테스트를 하게 되면

DB에 저장이 되고, 저장이 되었기 때문에 중복된 회원이라고 오류가 발생하게 되므로 테스트를 반복할 수 없게 된다.

 

DB는 DB에 인서트 쿼리를 하고 커밋을 해줘야지만 DB에 반영이 된다.

오토커밋의 경우에도 마찬가지로 커밋을 해줬기 때문에 반영이 되는 원리!

그렇지만 테스트 끝난 후에 롤백한다면? DB에 반영되지 않는다.

 

결국 Transactional 어노테이션은 테스트가 끝난 후에, 롤백을 하는 역할을 해준다~~

그렇기 때문에 반복해서 테스트를 가능하게 해준다ㅋㅋㅋ

또한, 테스트 메소드마다 각각 동작하기 때문에 여러개의 테스트를 동시에 가능하게 해준다.

마찬가지로, 롤백을 하게 되면, DB를 지우는 코드를 넣지 않아도 되기 때문에 번거로움을 덜어준다~~

반응형

테스트 케이스를 만들때는 굳이 생성자를 따로 만들어서 할 필요가 없음ㅋㅋㅋ

왜냐하면, 다른 곳에서 가져다가 쓸 것도 아니고...ㅋㅋㅋㅋ

그렇기 때문에 필드에다가 어노테이션 달아도 됨!

 

그래서 기존에 있던 생성자를 삭제하고,

필드에다가 기존의 MemoryMemberRepository를 MemberRepository로 수정하고 Autowired 주입해준다.

 

회원 중복이 될 경우를 대비해서 db를 삭제해도 되는데,

실무에서는 테스트용 db를 따로 구축하거나 로컬 pc의 db에서 테스트를 진행함.

 

스프링이 정상적으로 올라오고 회원가입 테스트도 정상

 

최소한의 단위로 순수하게 자바코드로만 테스트 하는것을 단위 테스트라고 불린다.

스프링 컨테이너와 DB까지 연동하는 것을 통합 테스트라고 한다.

강사님께서 언급하시기를, 가급적이면 순수한 단위테스트를 잘 만드는 테스트가 좋은 테스트일 확률이 높다고 한다.

스프링 컨테이너까지 어쩔수 없이 올려야 되는 상황이면, 테스트 설계가 잘못되었을 확률이 높기 때문...

그렇기 때문에 단위단위로 쪼개서 잘 테스트를 할 수 있도록 하자~~!

728x90
반응형

댓글