Junit 5에서는 테스트를 진행하는 어노테이션이 여러 종류가 있다.
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
vSpringBootTest는 실제 애플리케이션을 자신의 로컬 위에 올려서 포트주소가 Listening 되어지고 , 실제Database와 커넥션이 붙어지는 상태에서 진행되는 Live 테스트 방법이다.
커넥션이 붙어지기 때문에 기존 서버에 등록된 Bean과 component를 다 띄운 상태에서 테스트 한다.
실제 DB와 연결되어 테스트 하지만 등록 후 테스트가 끝나면 rollback이 되기 때문에 데이터상에는 변화가 없다.
하지만 테스트 환경과 분리되는 것이좋기 때문에
Test환경에서 DB를 따로 구축하여 사용하는 것이 좋다.
Test에 resource 폴더를 만들고 설정파일 yml 을 생성하여
spring:
datasource:
url: jdbc:h2:mem:test
username: sa
password:
driver-class-name: org.h2.Driver
아래와 같이 설정해 둔다면 테스트 환경에서는 memory DB를 사용하게 된다.
@WebMvcTest(BookController.class)
다음은 WebMvcTest 이다.
Mock이라는 가상 환경에 원하는 객체만 Ioc환경 등록을 하여
가상으로 테스트 할 수 있는 환경을 제공해 준다.
DB가 없는 가상환경이기 때문에 테스트가 가볍고 서버와 완전히 분리되어 실행된다.
when, given 메소드를 통해 테스트할 메소드의 기대값을 설정해 줄 수 있다.
when(bookService.save(book)).thenReturn(new Book(1l,"스프링 따라하기" , "코스"));