development

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

big-blog 2021. 1. 10. 19:50
반응형

@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();

테스트도 Spring Bean처럼 인스턴스화되므로 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()메서드 를 호출하여 앱 컨텍스트에 액세스 할 수 있습니다 . org.springframework.test 패키지에
대한 javadocs확인하십시오 .


규칙 ApplicationContext을 사용하여 클래스의 인스턴스를 삽입 할 수 있습니다 . 스프링이 아닌 다른 러너를 사용하려는 경우 매우 편리 할 수 ​​있습니다. 예를 들면 다음과 같습니다.SpringClassRuleSpringMethodRule

@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() {
    }
}

참조 URL : https://stackoverflow.com/questions/2425015/how-to-access-spring-context-in-junit-tests-annotated-with-runwith-and-context

반응형