@단위 테스트에서 콩을 가져오기 위한 가져오기 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의 핵심 지원은 다음을 통해 "루트 구성"을 제공해야 합니다.@ContextConfiguration
Spring 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
'programing' 카테고리의 다른 글
자바스크립트의 ++someVariable 대 someVariable++ (0) | 2023.08.05 |
---|---|
UIViewController의 뷰를 하위 뷰로 추가하는 방법 (0) | 2023.08.05 |
이미지를 Amazon ECR에 푸시할 수 없음 - "기본 인증 자격 증명 없음"으로 실패함 (0) | 2023.08.05 |
PowerShell의 스크립트 파일에서 사용자 프로파일을 다시 로드하는 방법 (0) | 2023.08.05 |
내부 조인 쿼리의 반대쪽 (0) | 2023.08.05 |