Пружинная установка / тестирование интеграции - PullRequest
1 голос
/ 13 февраля 2010

Я не писал модульное или интеграционное тестирование, но сейчас пытаюсь. У меня проблемы с настройкой среды.

У меня есть контекст приложения в WEB-INF / applicationContext * .xml и в моем applicationContext.xml он содержит ссылку на файл свойств для пользователя / прохода БД, хоста LDAP и т. д.

<bean id="propertyConfigurer"
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>/WEB-INF/spring-config/dev.properties</value>
            </list>
        </property>
    </bean>

У меня есть другие свойства для log4j config (diff config для DEV / Staging / Production). ${webapp.root} определяется в web.xml

 <!-- log4j setting -->
    <bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetClass" value="org.springframework.util.Log4jConfigurer" />
        <property name="targetMethod" value="initLogging" />
        <property name="arguments">
            <list>
                <value>${webapp.root}/${log4j.properties.location}</value>
            </list>
        </property>
    </bean>

А теперь я пытаюсь поместить в тестовый класс следующее.

@Override
protected String[] getConfigLocations() {
   return new String[]{
            "file:trunk/code/web/WEB-INF/applicationContext.xml",
        };
}

Это правильно ссылается на мой xml, но все свойства испорчены.

Я хочу знать следующее:

  • Есть ли способ правильно настроить тестовый класс? Если нет, я должен переместить эти классы?
  • Как мне настроить Log4j, если есть ссылка на webroot, которая существует только в контейнере ?!
  • Какова лучшая практика расположения конфигураций Spring?

Пожалуйста, сообщите

Спасибо

Ответы [ 3 ]

6 голосов
/ 13 февраля 2010

Этот мой пост в блоге описывает основные шаги для достижения вашей цели.

Обратите внимание, что модульные тесты не должны знать, что у вас есть webapp-root - они обычно запускаются без запуска какого-либо контейнера сервлета. Поэтому поместите альтернативные файлы конфигурации в тестовые пакеты и попробуйте.

1 голос
/ 11 июля 2012

Вы можете использовать аннотации для ссылки на необходимую конфигурацию из тестов, например:

@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({
     DependencyInjectionTestExecutionListener.class,
     DirtiesContextTestExecutionListener.class,
     TransactionalTestExecutionListener.class })
@ContextConfiguration(locations = {
     "file:../WebService/src/main/resources/application-context.xml",
     "file:../ServiceLayer/src/test/resources/ServiceLayer-dao-test-context.xml" })
public class MyTest {
     // class body...
}
1 голос
/ 13 февраля 2010

Для модульного тестирования не следует использовать контекст приложения Spring.Вы должны тестировать все свои бобы и контроллеры по отдельности, так как они являются отдельными единицами в системе.Поскольку они являются POJO, вы можете программно соединить все вместе в коде тестового примера.Это также решает такие проблемы, как расположение файла свойств ведения журнала, поскольку вы можете программно указать другой путь, который не зависит от свойства webroot.

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

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