Модульному тесту в Maven требуется доступ к каталогу src / main / webapp - PullRequest
11 голосов
/ 23 апреля 2010

Я пытаюсь выполнить модульное тестирование веб-приложения, которое я разрабатываю в Maven / Eclipse. Это веб-приложение Spring MVC, и мне нужны тесты для проверки моего модельного контроллера.

Для этого мне нужно использовать XML-файлы конфигурации веб-приложения для внедрения контроллера, однако все мои настройки (и другие связанные файлы, на которые ссылается конфигурация) находятся в каталоге src / main / webapp (согласно Maven). соглашение) - здесь есть много файлов, на которые мне нужно сослаться в моих тестах, но они недоступны при запуске теста, поскольку они не находятся на пути к классам (кажется, что Maven только добавляет src / main / java, src / test / java, src / main / resources, src / test / resources для пути к классам, но не src / main / webapps)

Я не хочу копировать все мое веб-приложение в папку src / test / resources только для целей тестирования - есть ли другой способ получить к ним доступ?

Я могу обойти это, изменив Eclipse «Run Configurations», чтобы включить эту папку в classpath, но это не будет работать при запуске тестов из командной строки?

Кто-нибудь еще сталкивался с этим? есть известное решение?

Спасибо!

Ответы [ 4 ]

6 голосов
/ 23 апреля 2010

В общем, вы должны использовать mocks (например, EasyMock или jMock) для выполнения модульного тестирования вашего контроллера;модульный тест должен проверять компонент изолированно от остальной системы.В Spring 3 вы можете определить свои контроллеры как POJO с аннотациями, а затем просто протестировать контроллеры без какого-либо взаимодействия со стороны Spring.

Если вы хотите провести больше тестов на уровне интеграции, то вы можете разместить общиечасти конфигурационных файлов в src / main / resources, чтобы они стали доступны в пути к классам.Затем используйте тестовую конфигурацию в src / test / resources для вашего теста.Этот файл может либо импортировать эти файлы вместе со всем, что вам нужно, либо вы можете аннотировать ваш тестовый пример с помощью @ContextConfiguration, чтобы указать несколько файлов, необходимых для сборки контекста.

Конкретный пример см. В этом сообщение в блоге об интеграционном тестировании Spring MVC . Глава «Тестирование» руководства Spring также содержит хороший обзор интеграционного тестирования в Spring.

4 голосов
/ 25 октября 2012

Вы можете добиться этого, используя maven-surefire-plugin, как показано ниже:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
            <additionalClasspathElements>
                <additionalClasspathElement>src\main\webapp\</additionalClasspathElement>
            </additionalClasspathElements>
        </configuration>
    </plugin>

Теперь вы можете получить доступ к своему файлу web.xml, например:

getClass().getClassLoader().getResourceAsStream("classpath:webapp/WEB-INF/web.xml")
4 голосов
/ 16 августа 2010

Первая ссылка Эмиля была правильной, показывая правильные местоположения @ContextConfiguration.

Если ваши файлы конфигурации Spring находятся в src / main / webapp / **, то они не будут в пути к классам, когдапостроенный Maven.Чтобы получить конфигурацию для тестирования интеграции, просто укажите путь с помощью префикса file:.

@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/app-config.xml")

Если вы используете плагин Spring STS для создания нового проекта Spring MVC, вы заметите, что файлы конфигурации контекста приложенияпомещены в расположение моего примера.Затем их можно использовать в интеграционном тестировании, чтобы указать путь с помощью префикса file:, как описано выше.

0 голосов
/ 23 апреля 2010

Для этого мне нужно использовать мои XML-файлы конфигурации webapp для ввода контроллера, однако все мои настройки (и другие связанные файлы, на которые ссылается конфигурация) находятся в каталоге src / main / webapp

Какие именно файлы вам также понадобятся во время юнит-тестов?

Я не хочу копировать все мое веб-приложение в папку src / test / resources только для целей тестирования - есть ли другой способ получить к ним доступ?

Нет. Если вы хотите, чтобы они были в пути к классам, поместите их в src/main/resources или src/test/resources, файлы в src/main/webapp не находятся в пути к классам, потому что они не должны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...