복붙노트

[SPRING] 커스텀 스프링 부트 스타일 스타터 라이브러리의 통합 테스트 자동 설정 방법

SPRING

커스텀 스프링 부트 스타일 스타터 라이브러리의 통합 테스트 자동 설정 방법

필자는 함께 일하는 여러 다른 Spring Boot 응용 프로그램간에 공유되는 기능을 제공하기 위해 라이브러리를 작성 중입니다.

많은 Spring Boot 스타터 라이브러리가 제공하는 자동 설정과 비슷한 것을하고 싶습니다. 그것, 또는 그것을 사용하는 애플 리케이션의 ApplicationContext와 내 라이브러리를 통합하는 다른 간단한 선언적 방법.

자동 구성 작동 방식을 설명하는 리소스를 찾았습니다. 위의 문제를 파악할 수 있습니다.

그러나 필자는 스프링 부트 응용 프로그램과 적절히 통합되는 라이브러리의 테스트 스위트의 일부로 테스트 할 수있는 좋은 예제를 찾을 수 없었습니다. 이상적으로는 테스트 용으로 라이브러리 테스트에 직접 작성된 간단한 Spring Boot 애플리케이션을 시작하고 이에 대한 올바른 주석을 추가 한 다음 정확한 빈이 구성되도록 주장 할 수있다.

SpringBootTest 주석을 사용하여 통합 테스트를 작성했지만 테스트 시작 전에 TestApplication이 시작되지 않았던 TestApplication 클래스를 작성하려고했습니다.

라이브러리를 테스트 할 목적으로 그런 간단한 응용 프로그램을 시작하려면 어떻게해야합니까? 내 테스트는 다른 테스트 프레임 워크 대 다른 테스트 프레임 워크를 변경하는 경우 Spock 및 Spock-Spring으로 작성되었습니다.

해결법

  1. ==============================

    1.나는 다음 테스트 클래스와 함께 작동하도록 만들 수 있었다 :

    나는 다음 테스트 클래스와 함께 작동하도록 만들 수 있었다 :

    @SpringBootTest
    @ContextConfiguration(classes = TestApplication)
    class DummyIntegrationSpec extends Specification {
    
        @Autowired
        DummyService dummyService
    
        void 'dummy service should exist'() {
            expect:
            dummyService.getMessage() == DummyConfiguration.MESSAGE
        }
    }
    

    src / test / groovy / com / example / project / TestApplication.groovy에있는이 TestApplication 클래스

    @SpringBootApplication(scanBasePackages = 'com.example.project.config')
    @EnableAutoConfiguration
    class TestApplication extends SpringBootServletInitializer {
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(TestApplication)
        }
    
        static void main(String[] args) {
            SpringApplication.run(TestApplication, args)
        }
    }
    

    테스트 애플리케이션이 src / main에서 src / test로 테스트 애플리케이션 클래스를 옮길 때 올바른 애플리케이션을 시작하고 올바른 컨텍스트를로드하기 위해해야하는 두 가지 주요 변경 사항은 다음과 같습니다.

    라이브러리 자동 구성은 제공되는 링크에 언급 된 구조와 유사한 구조를 따릅니다.

  2. ==============================

    2.기본 스프링 애플리케이션 / 테스트가 시작되고 모든 빈이 사용자 환경에 등록되는 동안 자동 구성이 자동으로 선택되어야합니다. 자동 배선이 가능하며 조건과 초기화 순서를 따르십시오.

    기본 스프링 애플리케이션 / 테스트가 시작되고 모든 빈이 사용자 환경에 등록되는 동안 자동 구성이 자동으로 선택되어야합니다. 자동 배선이 가능하며 조건과 초기화 순서를 따르십시오.

    요약하면 패키지를 검사하는 @ComponentScan이있는 @Configuration 클래스로 주석이 달린 자동 구성이 있는지 확인하십시오. 또한 자동 구성 클래스가 포함 된 spring.factories 파일을 만들었는지, 봄 부팅 Maven 플러그인을 제거했는지 확인하십시오.

    또한 자동 구성 프로젝트에 @SpringBootApplication, @EnableAutoConfiguration 또는 주요 스프링 부트 프로젝트에만 있어야하는 다른 스프링 부트 주석 (각 스택에 하나씩 있어야 함)과 같은 주석이 추가되지 않도록하십시오.

    아래 도움말을 참조하십시오.

    스프링 부트는 미리 만들어진 많은 자동 구성 부모 프로젝트를 기반으로합니다. 스프링 부트 스타터 프로젝트에 이미 익숙해야합니다.

    다음 간단한 단계를 수행하여 자신의 스타터 프로젝트를 쉽게 만들 수 있습니다.

    자동 구성 시작 프로젝트에는 프로젝트를 실행 가능한 JAR로 패키지하고 의도 한대로 클래스 경로로로드하지 않기 때문에 스프링 부트 Maven 플러그인이 포함되어 있지 않은지 확인하십시오. 스프링 부트는 spring.factories를 찾을 수 없으며 구성을로드하지 않습니다.

  3. from https://stackoverflow.com/questions/43078136/how-to-integration-test-auto-configuration-for-a-custom-spring-boot-style-starte by cc-by-sa and MIT license