如何访问Spring上下文中使用@RunWith和@ContextConfiguration注解的JUnit测试?
-
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();
解决方案
由于测试将被实例化就像一个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()
方法访问该应用的上下文。结果
查看的javadoc 为包org.springframework 。测试
这可以通过使用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