Как получить доступ к контексту Spring в тестах JUnit, помеченных @RunWith и @ContextConfiguration?
-
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();
Решение
Поскольку тесты также будут создаваться как bean-компонент Spring, вам просто нужно реализовать интерфейс 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()
метод.
Проверьте javaдокументы для пакета 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() {
}
}