Spring Application 테스트
•
Spring 프레임워크를 사용하므로 테스트도 도메인 로직을 테스트하지 않는 이상 다양한 의존성이 관련된 객체들을 테스트하게 될 것이다.
•
이때, ApplicationContext가 스캔할 범위를 정해서 mock Bean을 생성하도록 할 수 있다.
통합테스트 | 슬라이스테스트(단위테스트) | |
어노테이션 | @SpringBootTest | @DataCassandraTest
@DataJdbcTest
@DataJpaTest
@DataLdapTest
@DataMongoTest
@DataNeo4jTest
@DataR2dbcTest
@DataRedisTest
@JdbcTest
@JooqTest
@JsonTest
@RestClientTest
@WebFluxTest
@WebMvcTest
@WebServiceClientTest |
설명 | 실제 운영 환경에 가까운 모든 의존성을 제공 | 특정 범위의 테스트가 필요할 경우 활용되며 해당 단위테스트에 필요한 범위의 의존성을 제공 |
장점 | 실제 운영 환경에 가까운 테스트가 가능하기 때문에 이슈가 적다 | 원하는 범위의 테스트에 대해 빠른 결과를 얻을 수 있다 |
단점 | 간단한 테스트를 한다고 해도 모든 환경을 로드하기 때문에 시간이 오래 걸린다. | 모든 환경을 테스트하는 것이 아니기 때문에 단위테스트 외에서 문제가 발생할 수 있다. |
@SpringBootTest
•
개요
◦
통합 테스트를 제공하는 가장 기본적인 테스트 어노테이션이다.
◦
어플리케이션 실행 시 설정을 임의로 바꿀 수도 있고 여러 단위 테스트를 하나의 통합 테스트로 수행하게끔 할 수도 있다.
◦
컴포넌트 스캔의 대상이 되는 범위는 모든 Bean이다.
•
속성
◦
classes
▪
기본적으로 @SpringBootTest는 모든 빈을 등록하나 classes 속성을 정의하는 경우 해당 클래스의 빈만 정의한다.
▪
config 설정이 있다면 해당 classes로 등록해줘야 한다.
◦
WebEnvironment
▪
WebEnvironment.MOCK
•
아무런 설정이 없을 시 적용되는 디폴트 설정이다.
•
mock 서블릿 환경으로 내장톰캣이 구동되지 않는다.(브라우저에서 접속되지 않는다.)
▪
WebEnvironment.RANDOM_PORT
•
스프링부트를 직접 구동시킨 것처럼 내장톰캣이 구동되나 랜덤포트로 구동된다.
▪
WebEnvironment.DEFINED_PORT
•
정의된 포트로 내장톰캣이 구동된다
▪
WebEnvironment.NONE
•
WebApplicationType.NONE으로 구동된다.
@WebMvcTest
•
MVC를 테스트하기 위한 어노테이션이다.
•
웹에서 테스트하기 힘든 컨트롤러를 테스트하기에 적합하며 웹 상에서 요청과 응답에 대해서 테스트할 수 있다.
•
Security, Filter까지 테스트되며 수동으로 추가, 삭제가 가능하다.
•
다음 Bean들만 스캔 범위에 포함된다.
◦
@Controller, @ControllerAdvice, @JsonComponent, Converter, GenericConverter, Filter, HandlerInterceptor
@DataJdbcTest
•
@JdbcTest와 유사하지만 Spring Data JDBC Repositoreis를 사용하는 테스트에서 사용한다.
•
인메모리 데이터베이스, JdbcTemplate, Spring Data JDBC Repository들이 설정에 포함된다.
•
기본적으로 @Transactional을 포함하고 있다.