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

StackOverflow https://stackoverflow.com/questions/2425015

문제

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

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

  @Autowired
  MyService service;
...

}

접근이 가능한가요? services-test-config.xml 그러한 방법 중 하나로 프로그래밍 방식으로?좋다:

ApplicationContext ctx = somehowGetContext();
도움이 되었습니까?

해결책

테스트는 스프링 빈처럼 인스턴스화되므로 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
    }
}

다른 팁

이것도 잘 작동합니다 :

@Autowired
ApplicationContext context;

테스트 클래스가 Spring Junit 클래스를 연장하는 경우
(예 : AbstractTransactionalJUnit4SpringContextTests 또는 연장되는 다른 클래스 AbstractSpringContextTests), 당신은 호출하여 앱 컨텍스트에 액세스 할 수 있습니다. getContext() 방법.
확인하십시오 Javadocs 패키지 org.springframework.test의 경우.

인스턴스를 주입하는 것이 가능합니다. ApplicationContext 사용하여 수업 SpringClassRule그리고 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() {
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top