programing

@단위 테스트에서 콩을 가져오기 위한 가져오기 vs. @ContextConfiguration

lastmoon 2023. 8. 5. 10:53
반응형

@단위 테스트에서 콩을 가져오기 위한 가져오기 vs. @ContextConfiguration

SpringBoot 1.5.3을 사용하여 세 가지 테스트 구성을 설정하고 성공적으로 실행할 수 있었습니다.

방법 #1.다음을 사용하여 Bean 가져오기@Import주석

@RunWith(SpringJUnit4ClassRunner.class)
@Import({MyBean.class})
public class MyBeanTest() {
    @Autowired
    private MyBean myBean;
}

방법 #2.다음을 사용하여 Bean 가져오기@ContextConfiguration주석

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {MyBean.class})
public class MyBeanTest() {
    @Autowired
    private MyBean myBean;
}

방법 #3(내부 클래스 구성, 공식 블로그 게시물 기준)

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=AnnotationConfigContextLoader.class)
public class MyBeanTest() {

    @Configuration
    static class ContextConfiguration {
        @Bean
        public MyBean myBean() {
            return new MyBean();
        }
    }

    @Autowired
    private MyBean myBean;

}

고려사항@Import주석 문서

가져올 하나 이상의 {@linkConfiguration @Configuration} 클래스를 나타냅니다.

그리고 사실은MyBean구성 클래스가 아니라 주석이 달린 bean 클래스입니다.@Component주석 #1 방법이 올바르지 않은 것처럼 보입니다.

부터@ContextConfiguration문서화

{@code @ContextConfiguration}은(는) {@link org.springframework.context를 로드하고 구성하는 방법을 결정하는 데 사용되는 클래스 수준 메타데이터를 정의합니다.통합 테스트의 ApplicationContextApplicationContext}입니다.

장치 테스트에 더 잘 적용되는 것처럼 들리지만, 그래도 일종의 구성을 로드해야 합니다.

방법 #1과 #2는 더 짧고 간단합니다.방법 #3은 올바른 방법처럼 보입니다.

내 말이 맞니?성능이나 다른 것과 같은 방법 3번을 사용해야 하는 다른 기준이 있습니까?

#3 옵션을 선택하면 로더를 지정할 필요가 없습니다.실제 속성을 사용하지 않고 환경에 속성을 주입해야 하는 경우 doc의 예제 외에도 @TestPropertySource를 사용하여 env.를 재정의할 수 있습니다.

@RunWith(SpringRunner.class)
// ApplicationContext will be loaded from the
// static nested Config class
@ContextConfiguration
@TestPropertySource(properties = { "timezone = GMT", "port: 4242" })
public class OrderServiceTest {

    @Configuration
    static class Config {

        // this bean will be injected into the OrderServiceTest class
        @Bean
        public OrderService orderService() {
            OrderService orderService = new OrderServiceImpl();
            // set properties, etc.
            return orderService;
        }
    }

    @Autowired
    private OrderService orderService;

    @Test
    public void testOrderService() {
        // test the orderService
    }

}

스프링 부트가 제공하는 테스트 주석 중 하나를 사용하는지 아니면 처음부터 컨텍스트를 구축하는지에 따라 달라집니다.Spring Framework의 핵심 지원은 다음을 통해 "루트 구성"을 제공해야 합니다.@ContextConfigurationSpring Boot를 사용하는 경우 사용할 루트 컨텍스트를 검색하는 고유한 방법이 있습니다.기본적으로 첫 번째@SpringBootConfiguration-찾을 수 있는 유형입니다.일반적인 앱 구조에서, 그것이 바로 당신의@SpringBootApplication응용 프로그램 패키지의 루트에 있습니다.

이를 염두에 두고, 사용하기@ContextConfiguration이 설정을 사용하면 검색 기능이 비활성화되고 "단두콩" 이상의 기능을 수행할 수 있기 때문에 좋은 생각은 아닙니다.

사용자를 위해 컨텍스트가 생성되었으며 추가로 콩을 추가하려는 경우 두 가지 방법이 있습니다.

에) 할 , ,@Import절대적으로 괜찮습니다.그동안 자바독은@Import부품을 가져오는 것은 절대적으로 괜찮고 그것이 특정하지 않다는 것을 언급하기 위해 세련되었습니다.@Configuration클래스:

가져올 하나 이상의 구성 요소 클래스(일반적으로 @Configuration 클래스)를 나타냅니다.

그래서 1번 방법은 확실히 맞습니다.

구성 요소가 테스트에 로컬이고 다른 테스트와 공유할 필요가 없는 경우 내부@TestConfiguration사용할 수 있습니다.이는 참조 가이드에도 설명되어 있습니다.

언급URL : https://stackoverflow.com/questions/44364115/import-vs-contextconfiguration-for-importing-beans-in-unit-tests

반응형