예를 들어, 임베디드 톰캣에 배포 , Jetty 또는 Undertow 컨테이너). 따라서 리포지토리 계층을 독립적으로 테스트하는 것이 목표 인 경우 @IntegrationTest
을 사용하지 않아야합니다.
반면에 테스트에 특정 스프링 부트 기능 (표준 스프링 프레임 워크 기능, 의미 및 기본값과 달리)이 필요한 경우 실제로는 @ContextConfiguration
대신 @SpringApplicationConfiguration
이라는 테스트 클래스에 주석을 추가하려고합니다. 이유는 @SpringApplicationConfiguration
이 스프링 부트에만 해당하는 SpringApplicationContextLoader
을 미리 구성하기 때문입니다. 당신이 당신의 저장소 계층의 통합 테스트가 더 빨리 실행하려면
또한, (즉, 봄 부팅의 전체 오버 헤드없이), 그 의지 자동 구성 모든 후보 이후 @EnableAutoConfiguration
주석 구성 클래스를 제외하도록 선택할 수 있습니다 classpath에 자동 구성이 있습니다. 예를 들어 Spring Boot가 엔티티 스캐닝과 함께 임베디드 데이터베이스와 Spring Data JPA (JPA 프로 바이더로서의 Hibernate 포함)를 자동 구성하고자한다면 다음과 같이 테스트 구성을 구성 할 수 있습니다 :
@Configuration
@EnableJpaRepositories(basePackageClasses = UserRepository.class)
@EntityScan(basePackageClasses = User.class)
@Import({ DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class })
public class TestRepositoryConfig {}
그리고 다음과 같이 테스트 클래스에 해당 구성을 사용
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestRepositoryConfig.class)
@Transactional
public class UserRepositoryTests { /* ... */ }
감사합니다,
샘에게
추신 다음의 유용한 질문에 대한 답을 찾을 수있을 것입니다. Disable security for unit tests with spring boot
작성한 임의의 구성이 아닌 응용 프로그램 클래스를 SpringApplicationConfiguration 주석에 사용해야합니다. 또한'@ Integrationtest'도 정말로 필요합니까? 따라서 RestTemplate을 사용하여 응용 프로그램을 테스트 할 수 있도록 응용 프로그램을 시작합니다. 이것은 당신이하고 있거나 필요로하는 것처럼 보이지 않습니다. –
1) 응용 프로그램 클래스를 사용할 수 없습니다.이 모듈은 웹 모듈 (웹 모듈은 응용 프로그램 클래스를 포함합니다)에 의존합니다. 2) 리포지토리 테스트를 위해 RestTemplate이 필요한 이유는 무엇입니까? 이것은 웹 또는 웹 서비스 통합 테스트가 아닙니다. – led
'@ IntegrationTest'는 실제로 무엇을 이해합니까? 당신이하려고하는 것으로 판단 할 때 스프링 부트의 의미에서 통합 테스트와 아무런 관련이 없습니다. 통합 테스트가 아니라 저장소에 대한 단위 테스트를 작성하는 중입니다. –