직접 구현하며 살펴본 스프링 부트 동작 방식들과 직접 구현한 코드들이 실제 스프링 부트에서도 동일하게 동작하는지 검증
기존에 작성한 자동 구성관련 코드 파일들 전체 삭제 진행(config 패키지, imports 파일)
@MySpringBootApplication
→ @SpringBootApplication
로 변경
properties 수정
HellobootApplication 실행으로 서버를 실행시키고 HelloApiTest 수행
테스트가 성공적으로 동작함
⇒ properties의 설정 정보만 변경하더라도 스프링 부트의 자동 구성이 동일한 방식으로 서블릿 컨테이너를 띄워주고 내부 프로퍼티를 변경하고, dataSource를 만드는 쪽에서는 properties 정보를 이용하여 DB와 연결을 수행하는 것을 확인할 수 있음
HellobootTest
애너테이션 코드 파일 삭제 후 스프링 부트에 있는 기능을 이용하여 테스트 작성
DataSourceTest
, JdbcTemplateTest
에서 @JdbcTest 애너테이션 이용HelloRepositoryTest
, HelloServiceCountTest
에서는 @SpringBootTest 애너테이션 이용
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.*NONE*)
webEnvironment
의 설정을 NONE으로 준 것은 빈들을 컨테이너로 로딩하는데 이 테스트를 수행하는 동안에는 웹 환경을 세팅할 필요가 없다고 지정 해주는 것
DataSourceTest
수행
자동 구성에 의해서 기본적으로 만들어지는 dataSource를 embedded 버전으로 교체함
→ 테스트 수행 시 embedded 데이터베이스를 사용해서 DB와 관련된 테스트를 하면 운영용 DB를 사용하는 것 보다 훨씬 빠르게 동작할 수 있기 때문에 dataSource를 embedded 버전으로 교체하는 것
HelloRepositoryTest
수행
테스트 클래스에 @Transactional
을 추가
테스트에서 변경되는 DB결과가 롤백되어서 다른 테스트에 영향을 주지 않도록 만들어 줌
@SpringBootTest
는 기본적으로 롤백 테스트 여부에 대해서 미리 결정하고 있지 않기 때문에 DB 롤백을 적용하기 위해서 @Transactioanl
을꼭 붙여줘야됨
기존에 HellobootTest 애너테이션에서 메타애너테이션으로 @Transactional이 작성되어있었는데 애너테이션 파일을 삭제했기 때문에 발생한 에러임
HelloServiceCountTest
수행
@Transactional
을 추가10 . HelloServiceTest
수행 (HelloServiceTest는 단위 테스트이므로 문제없이 잘 작동할 것)
JdbcTemplateTest
수행
각각의 테스트를 별도로 수행했을 때 모두 성공한 것을 확인할 수 있음
테스트를 전부 수행하더라도 성공할 것
→ 각각의 테스트에서 서로 영향이 가지 않도록 @Transactional
을 추가했기 때문에