스프링 DB접근 기술 - 스프링 통합 테스트

장서연·2022년 1월 4일
0

스프링 입문

목록 보기
20/25

스프링 컨테이너와 DB까지 연결한 통합 테스트를 진행해보자

이전의 테스트 코드들을 보면, 스프링과는 상관없는 순수 자바코드를 테스트했었었다.

그런데 이제는 순수한 자바코드를 가지고 테스트할 수 없게 되었다. 왜냐, DB 커넥션 정보도 스프링부트가 들고 있고 그러니까..

그래서 이제부터는 테스트를 스프링과 엮어서 진행해야 한다!

test../service/MemberServiceIntegrationTest.java

@SpringBootTest, @Transactional 어노테이션을 넣어주고, 메모리에서 리포지토리를 생성하는 방식이었던 코드들을 다 지워주어야 한다. 이제는 직접 객체 생성해서 넣어주는게 아니라, 스프링 컨테이너한테 "멤버서비스, 멤버리포지토리 내놔!" 이렇게 해야 한다.

그때 어떻게 했냐면, constructor 가지고 했었었다. 근데 정말 단순히 테스트만 하는 것이므로, 필드 인젝션으로 멤버서비스와 멤버리포지토리를 사용하자! 간편하게!

test../service/MemberServiceIntegrationTest.java

@SpringBootTest
@Transactional
class MemberServiceIntegrationTest {
	@Autowired MemberService memberService;
    	@Autowired MemberRepository memberRepository;;
...
}

이제는 @AfterEach 에서 리포지토리의 데이터를 테스트마다 날렸던 로직도 필요없는데, 그 이유는 @Transactional 어노테이션을 적어주었기 때문이다.

  • @SpringBootTest : 스프링 컨테이너와 테스트를 함께 실행한다
  • @Transactional : 테스트케이스에 이 애노테이션이 있으면, 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백한다. 이렇게 하면 DB에 데이터가 남지 않으므로 다음 케이스에 영향을 주지 않는다.

0개의 댓글