Arquillian, Spring WebApplicationInitializer, встроенный Tomcat

Я хотел бы написать модульный (компонентный) тест для ресурса REST моего веб-приложения. Этот тест должен быть нацелен на открытый интерфейс REST и проверять его поведение, отправляя запросы и проверяя ответы.

Веб-приложение настраивается без использования web.xml и applicationContext.xml с использованием Spring WebApplicationInitializer. Это отлично работает, когда я просто запускаю приложение на своем сервере (Tomcat).

При запуске моего теста Arquillian архив ShrinkWrap развертывается на встроенном сервере Tomcat. Поскольку встроенный сервер работает с путем к классам моего веб-приложения, он также находит мой класс WebApplicationInitializer. Это проблематично, так как он загружает множество зависимостей и должен быть активирован только для теста.

Как я могу деактивировать свой WebApplicationInitializer (и предоставить альтернативную реализацию) в тесте?

При использовании файлов конфигурации XML это соответствует сокрытию реальных файлов конфигурации и использованию определенной (пустой?) конфигурации, которая используется в тесте.


person C-Otto    schedule 15.09.2015    source источник


Ответы (1)


Я обошел эту проблему, просто отключив свой экземпляр WebApplicationInitializer с помощью статического поля, которое я установил в методе @Deployment Arquillian.

Вы также можете изучить metadata-complete, из-за которого Tomcat не вызывает часть Spring, делегирующую полномочия экземпляру WebApplicationInitializer.

person C-Otto    schedule 16.09.2015
comment
Да, это одна из проблем использования встроенного контейнера. Вы также можете использовать управляемый/удаленный контейнер. - person LightGuard; 17.09.2015