반응형
@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
을 사용하여 클래스의 인스턴스를 삽입 할 수 있습니다 . 스프링이 아닌 다른 러너를 사용하려는 경우 매우 편리 할 수 있습니다. 예를 들면 다음과 같습니다.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() {
}
}
반응형
'development' 카테고리의 다른 글
단일 데이터베이스에서 테이블 이름을 필터링 할 수 있어야합니까? (0) | 2021.01.10 |
---|---|
C에서 구조체 또는 구조체에 대한 포인터를 반환할지 여부를 어떻게 선택합니까? (0) | 2021.01.10 |
a = b = c = d = 5와 같이 여러 변수를 할당하는 것이 옳습니까? (0) | 2021.01.10 |
정수에서 바이트 배열로 (0) | 2021.01.10 |
MongoDB 용 쿼리 IDE? (0) | 2021.01.10 |