@RunWith 및 @ContextConfiguration 주석이 달린 jUnit 테스트에서 Spring 컨텍스트에 액세스하는 방법은 무엇입니까?
-
19-09-2019 - |
문제
다음 테스트 클래스가 있습니다.
@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() {
}
}
제휴하지 않습니다 StackOverflow