@SpringBootTest는 실제 구동되는 애플리케이션과 똑같이 application context를 로드하여 테스트하기 때문에 하고싶은 테스트를 모두 할 수 있다.
하지만 설정된 빈을 모두 로드하기 때문에 규모가 크면 클수록 느려진다.
단위 테스트라는 의미가 희석 될 수 있다.
JUnit에 내장된 러너를 사용하는 대신 어노테이션에 정의된 러너 클래스를 사용한다.
@SpringBootTest를 사용하려면 반드시 붙여야한다.
테스트가 실행되기 전에 적용할 프로퍼티를 주입할 수 있다. 기존의 프로퍼티를 오버라이드 한다.
ex)@SpringBootTest(value = "a = test")
테스트가 실행되기전에 {key=value} 형식으로 프로퍼티를 추가할 수 있다.
application context에 load할 class를 지정할 수 있다. 따로 지정하지 않으면 @SpringBootConfiguration을 찾아서 로드한다.
애플리케이션이 실행될 때의 웹 환경을 설정할 수 있다.기본값은 Mock 서블릿을 로드하여 구동된다.
프로파일 환경(개발,QA,운영 환경)마다 다른 데이터소스를 갖는다면 어떻게 해야할까요?
@ActiveProfiles("local")과 같은 방식으로 원하는 프로파일 환경값을 부여한다.
테스트에서 @Transactional을 사용하면 테스트를 마치고 나서 수정된 데이터가 롤백된다. 다만 테스트가 서버의 다른 스레드에서 실행중이면, WebEnvironment의 Random_PORT나 DEFINED_PORT를 사용하여 테스트를 수행해도 트랜잭션이 롤백되지 않습니다.
@SpringBootTest는 기본적으로 검색 알고리즘을 사용해서 @SpringBootApplication이나 @SpringBootConfiguration 어노테이션을 찾는다. 스프링 부트 테스트이기 때문에 둘중 하나는 필수다.