programing

스프링 부트마다 1개의 @Configuration 클래스를 덮어씁니다@Test

iphone6s 2023. 3. 13. 20:14
반응형

스프링 부트마다 1개의 @Configuration 클래스를 덮어씁니다@Test

스프링 부트 어플리케이션에서 1개만 덮어쓰려고 합니다.@Configuration테스트 설정이 있는 클래스(특히 my class)@EnableAuthorizationServer @Configuration모든 시험에 합격했어요.

지금까지 스프링 부트 테스트 기능과 스프링 통합 테스트 기능을 개략적으로 소개한 결과, 다음과 같은 간단한 솔루션이 등장하지 않았습니다.

  • @TestConfiguration: 오버라이드가 아닌 확장용입니다.
  • @ContextConfiguration(classes=…​)그리고.@SpringApplicationConfiguration(classes =…​)1개의 클래스뿐만 아니라 설정 전체를 덮어씁니다.
  • 이너@Configuration내부 클래스@Test디폴트 설정을 덮어쓸 것을 권장합니다만, 예시는 기재되어 있지 않습니다.

좋은 의견이라도 있나?

내부 테스트 구성

테스트의 내부 @Configuration 예:

@RunWith(SpringRunner.class)
@SpringBootTest
public class SomeTest {

    @Configuration
    static class ContextConfiguration {
        @Bean
        @Primary //may omit this if this is the only SomeBean defined/visible
        public SomeBean someBean () {
            return new SomeBean();
        }
    }

    @Autowired
    private SomeBean someBean;

    @Test
    public void testMethod() {
        // test
    }
}

재사용 가능한 테스트 구성

여러 테스트에서 테스트 구성을 재사용할 경우 스프링 프로파일을 사용하여 스탠드아론 구성 클래스를 정의할 수 있습니다.@Profile("test")그런 다음 테스트클래스를 통해 프로파일을 활성화 합니다.@ActiveProfiles("test"). 완전한 코드 참조:

@RunWith(SpringRunner.class)
@SpringBootTests
@ActiveProfiles("test")
public class SomeTest {

    @Autowired
    private SomeBean someBean;

    @Test
    public void testMethod() {
        // test
    }
}

@Configuration
@Profile("test")
public class TestConfiguration {
    @Bean
    @Primary //may omit this if this is the only SomeBean defined/visible
    public SomeBean someBean() {
        return new SomeBean();
    }
}

@프라이머리

@Primarybean 정의에 대한 주석은 두 개 이상이 발견될 경우 이 주석에 우선 순위가 부여되도록 하기 위한 것입니다.

스프링 부트 프로파일을 사용해야 합니다.

  1. 테스트 구성에 주석을 달다@Profile("test").
  2. 프로덕션 구성에 주석을 달기 위해@Profile("production").
  3. 속성 파일에서 프로덕션 프로파일 설정:spring.profiles.active=production.
  4. 테스트 클래스의 테스트 프로파일을 설정하려면@Profile("test").

따라서 응용 프로그램을 시작할 때는 "생산" 클래스를 사용하고 테스트 스타를 시작할 때는 "테스트" 클래스를 사용합니다.

inner/nested를 사용하는 경우@Configurationclass 응용 프로그램의 기본 구성 대신 사용됩니다.

최근에 어플리케이션의 개발 버전을 만들어야 했습니다.이 버전은dev명령줄 arg 없이 바로 사용할 수 있습니다.이 문제를 해결하려면 이 클래스를 새 엔트리로 추가합니다.이 엔트리는 액티브프로파일을 프로그래밍 방식으로 설정합니다.

package ...;

import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.Import;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.StandardEnvironment;

@Import(OriginalApplication.class)
public class DevelopmentApplication {
    public static void main(String[] args) {
        SpringApplication application =
            new SpringApplication(DevelopmentApplication.class);
        ConfigurableEnvironment environment = new StandardEnvironment();
        environment.setActiveProfiles("dev");
        application.setEnvironment(environment);
        application.run(args);
    }
}

자세한 내용은 Arvind Rai의 Spring Boot Profiles 예를 참조하십시오.

언급URL : https://stackoverflow.com/questions/39041542/override-a-single-configuration-class-on-every-spring-boot-test

반응형