Search
Duplicate
🪚

@SpringBootTest vs 슬라이스 테스트

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을 포함하고 있다.