对于带有junit的spring应用程序的集成测试,我正在继承org.springframework.test.context.ContextLoader
,因为我想使用已经存在的XmlWebApplicationContext
来连接我的测试类,如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=MyContextLoader.class)
@Transactional
public class MyTest {
@Autowired
public AccountDao accountDao;
}
我的ContextLoader的实现如下:
public class MyContextLoader实现ContextLoader {
@Override
public String[] processLocations(Class<?> clazz, String... locations) {
return locations;
}
@Override
public ApplicationContext loadContext(String... locations) throws Exception {
try {
// Start Embedded Tomcat
EmbeddedTomcat tomcat = new EmbeddedTomcat("mas", 8080);
tomcat.launch();
Context rootContext = tomcat.getRootContext();
ContextLoaderListener contextLoaderListener = (ContextLoaderListener) rootContext.getApplicationLifecycleListeners()[0];
XmlWebApplicationContext context = (XmlWebApplicationContext) contextLoaderListener.getContext();
GenericApplicationContext c = new GenericApplicationContext(context);
AnnotationConfigUtils.registerAnnotationConfigProcessors(c);
//context.refresh();
//context.registerShutdownHook();
return context;
}
catch(Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
在loadContext(...)
方法中放置断点时,我可以调用getBean(AccountDao.class),一切正常。但是,似乎我的测试类实际上没有自动装配。我调试了一点并逐步完成了Spring代码,似乎在方法AbstractAutowireCapableBeanFactory.populateBean(String beanName,AbstractBeanDefinition mbd,BeanWrapper bw)中,没有为我的类Test设置PropertyValues。
也许,我是否设置了错误的注释处理?
代码信息:正如您可能猜到的那样,我正在进行集成测试,因此启动嵌入式tomcat服务器以测试我的RESTful Web服务。如何通过嵌入式tomcat中的“hack”获取应用程序上下文如下所示:Getting Access to Spring with Embedded Tomcat 6
我期待着你的回复。 埃里克
答案 0 :(得分:0)
我认为这里的问题是你正在创建一个新的GenericApplicationContext
,它不是Spring用来自动测试测试bean的那个。