복붙노트

[SPRING] @RunWith 및 @ContextConfiguration 주석이 달린 jUnit 테스트에서 Spring 컨텍스트에 액세스하는 방법?

SPRING

@RunWith 및 @ContextConfiguration 주석이 달린 jUnit 테스트에서 Spring 컨텍스트에 액세스하는 방법?

다음과 같은 테스트 클래스가 있습니다.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/services-test-config.xml"})
public class MySericeTest {

  @Autowired
  MyService service;
...

}

이러한 메소드 중 하나에서 services-test-config.xml에 프로그래밍 방식으로 액세스 할 수 있습니까? 처럼:

ApplicationContext ctx = somehowGetContext();

해결법

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

    1.테스트가 스프링 빈처럼 인스턴스화되기 때문에 ApplicationContextAware 인터페이스를 구현하면된다.

    테스트가 스프링 빈처럼 인스턴스화되기 때문에 ApplicationContextAware 인터페이스를 구현하면된다.

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = {"/services-test-config.xml"})
    public class MySericeTest implements ApplicationContextAware
    {
    
      @Autowired
      MyService service;
    ...
        @Override
        public void setApplicationContext(ApplicationContext context)
                throws BeansException
        {
            // Do something with the context here
        }
    }
    
  2. ==============================

    2.이것은 잘 작동합니다.

    이것은 잘 작동합니다.

    @Autowired
    ApplicationContext context;
    
  3. ==============================

    3.테스트 클래스가 Spring JUnit 클래스를 확장한다면 (예 : AbstractTransactionalJUnit4SpringContextTests 또는 AbstractSpringContextTests를 확장하는 다른 클래스) getContext () 메소드를 호출하여 앱 컨텍스트에 액세스 할 수 있습니다. org.springframework.test 패키지의 javadoc을 확인하십시오.

    테스트 클래스가 Spring JUnit 클래스를 확장한다면 (예 : AbstractTransactionalJUnit4SpringContextTests 또는 AbstractSpringContextTests를 확장하는 다른 클래스) getContext () 메소드를 호출하여 앱 컨텍스트에 액세스 할 수 있습니다. org.springframework.test 패키지의 javadoc을 확인하십시오.

  4. ==============================

    4.SpringClassRule을 이용하여 ApplicationContext 클래스의 인스턴스를 삽입 할 수있다. 및 SpringMethodRule 규칙. 당신이 사용하고 싶다면 매우 편리 할 것입니다. 또 다른 비 스프링 주자. 다음은 그 예입니다.

    SpringClassRule을 이용하여 ApplicationContext 클래스의 인스턴스를 삽입 할 수있다. 및 SpringMethodRule 규칙. 당신이 사용하고 싶다면 매우 편리 할 것입니다. 또 다른 비 스프링 주자. 다음은 그 예입니다.

    @ContextConfiguration(classes = BeanConfiguration.class)
    public static class SpringRuleUsage {
    
        @ClassRule
        public static final SpringClassRule springClassRule = new SpringClassRule();
    
        @Rule
        public final SpringMethodRule springMethodRule = new SpringMethodRule();
    
        @Autowired
        private ApplicationContext context;
    
        @Test
        public void shouldInjectContext() {
        }
    }
    
  5. from https://stackoverflow.com/questions/2425015/how-to-access-spring-context-in-junit-tests-annotated-with-runwith-and-context by cc-by-sa and MIT license