对于我的带有 junit 的 spring 应用程序的集成测试,我正在子类化org.springframework.test.context.ContextLoader
,因为我想使用已经存在XmlWebApplicationContext
的来连接我的测试类,如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=MyContextLoader.class)
@Transactional
public class MyTest {
@Autowired
public AccountDao accountDao;
}
我的 ContextLoader 的实现如下:
公共类 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 获取应用程序上下文:使用嵌入式 Tomcat 6 访问 Spring
我期待着您的回复。埃里克