Для интеграционных тестов для моего весеннего приложения с junit я подклассифицирую 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) PropertyValues не установлены для моего класса Test.
Возможно, янеправильная настройка обработки аннотаций?
Информация к коду: Как вы можете догадаться и увидеть, я провожу интеграционный тест и поэтому запускаю встроенный сервер Tomcat, чтобы протестировать мой веб-сервис RESTful.Как получить контекст приложения с помощью «хака» от встроенного кота, показано в моем посте здесь: Получение доступа к Spring с помощью Embedded Tomcat 6
Я с нетерпением жду ваших ответов.Erik