我在Web应用程序中使用基于java的配置:
public class SpringInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.getEnvironment().getPropertySources().addLast( myMethod() );
ctx.scan("com.xxx.xxx");
}
}
我该怎么测试呢?
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(????????????)
public class PersistenceConfigurationTest {
@PersistenceContext EntityManager entityManager;
@Autowired DataSource dataSource;
@Test
public void infrastructureShouldBeAutowired() {
assertNotNull(dataSource);
assertNotNull(entityManager);
}
}
补充说明: 有一些建议的答案如何基于相同的配置类创建另一个上下文。我不能这样做,因为我微调创建的上下文(添加一些属性)。我刚刚添加了代码
答案 0 :(得分:3)
我认为这会回答你的问题: https://jira.springsource.org/browse/SPR-10199?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
总之:你想做的事情还不可能。同样在这里。我使用WebApplicationInitializer来使用CustomBeanFactory并实现logger ctor注入。但现在我无法将记录器注入我的测试对象。</ p>
答案 1 :(得分:0)
这篇博文几乎应该完全回答你的问题(我希望你使用的是Spring 3.1)。
滚动到使用@Configuration类进行集成测试部分
希望能解决你的问题。
答案 2 :(得分:0)
@Configuration
@ComponentScan("com.xxx.xxx")
public class Config {}
public class SpringInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(Config.class);
// Register and map the dispatcher servlet
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = {Config.class})
public class PersistenceConfigurationTest {
@PersistenceContext EntityManager entityManager;
@Autowired DataSource dataSource;
@Test
public void infrastructureShouldBeAutowired() {
assertNotNull(dataSource);
assertNotNull(entityManager);
}
}