我有以下测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/services-test-config.xml"})
public class MySericeTest {
@Autowired
MyService service;
...
}
是否可以通过其中一种方法以编程方式访问services-test-config.xml
?像:
ApplicationContext ctx = somehowGetContext();
答案 0 :(得分:68)
这也很好用:
@Autowired
ApplicationContext context;
答案 1 :(得分:45)
由于测试将像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
}
}
答案 2 :(得分:6)
如果您的测试类扩展了Spring JUnit类
(例如,AbstractTransactionalJUnit4SpringContextTests
或任何其他扩展AbstractSpringContextTests
的类),您可以通过调用getContext()
方法访问应用上下文。
查看org.springframework.test包的javadocs。
答案 3 :(得分:0)
使用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() {
}
}