我具有以下测试类

@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() {
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top