2011-08-27 4 views
3

Я не специалист по весне, но мне была предоставлена ​​устаревшая система с огромным файлом контекста (не разделенным на модули).Загрузка частичного контекста Spring

Я хочу добавить некоторые модульные тесты, которые проверяют разные части системы с фактической конфигурацией производства. Я начал использовать классы ClassPathXmlApplicationContext/FileSystemXmlApplicationContext для загрузки контекста, однако - это происходит навсегда. Можно ли загружать только части контекстного файла (рекурсивно) без необходимости отделять исходный файл на модули?

Update: Я просто пост здесь моя реализация решения Ральфа с использованием Maven: мой pom.xml:

 <plugin> 
     <groupId>com.google.code.maven-config-processor-plugin</groupId> 
     <artifactId>maven-config-processor-plugin</artifactId> 
     <version>2.0</version> 
     <configuration> 
      <namespaceContexts> 
       <s>http://www.springframework.org/schema/beans</s> 
      </namespaceContexts> 
      <transformations> 
       <transformation> 
        <input>context.xml</input> 
        <output>context-test.xml</output> 
        <config>test-context-transformation.xml</config> 
       </transformation> 
      </transformations> 
     </configuration> 
     <executions> 
      <execution> 
       <goals> 
        <goal>process</goal> 
       </goals> 
       <phase>test</phase> 
      </execution> 
     </executions> 
    </plugin> 

мой тест-контекстно-transformation.xml:

<processor> 
    <add> 
     <name>/s:beans</name> 
     <value> 
      <![CDATA[ 
       default-lazy-init="true" 
      ]]> 
     </value> 
    </add> 
</processor> 
+0

Почему вы не создаете отдельные файлы конфигурации для тестов только с необходимыми компонентами/config и загружаете их в тестовые классы? –

+0

Конфигурация довольно сложная. Я хочу убедиться, что контекст определен правильно. Убедитесь, что элементы не определены дважды и отсутствуют отсутствующие элементы. Использование всего файла также позволяет мне перебирать несколько элементов и тестировать их (обратите внимание, что я тестирую много устаревшего кода, и это позволяет мне делать это относительно быстро). – krakover

ответ

2

Я думаю, это не работает из коробки. Но вы можете попробовать это (это просто идея, я не знаю, работает ли он)

Spring поддержка так называемых lazy initialization идея заключается в том, чтобы добавить это все бобы. Я могу представить два пути.

  • Простой инструмент, который создает копию Orignal файла конфигурации XML и добавить default-lazy-init="true" уровень контейнера beanss) декларация.
  • Попробуйте сделать это программно. С Bean постпроцессор, или попытаться «внедрить» конфигурацию default-lazy-init="true" программного
3

Если вы пытаетесь запустить «Unit» тестов, вы не будете требовать полного контекста приложения на всех. Просто создайте экземпляр класса, который вы хотите протестировать (и, возможно, его сотрудники, хотя насмехаются, могут быть лучшим вариантом) и от вас. Единичные тесты должны концентрироваться на отдельных компонентах в изоляции - в противном случае они не являются модульными испытаниями.

Если вы пытаетесь запустить полный интеграционного тест путем создания полной иерархии объекта, определенную в контексте приложения, то это может быть простым по первому рефакторинга своего контекста и разделениям его на модули - как вы предлагали уже.

+0

+1 Это кажется правильным для теста UNIT. И я соглашаюсь с вашей политикой тестирования INTEGRATION. – KLE