2011-08-27 93 views
3

我不是一個Spring專家,但給了一個具有巨大上下文文件(不分成模塊)的遺留系統。加載部分Spring上下文

我想添加一些單元測試 - 驗證系統的不同部分,以及實際的生產配置。 然而,我開始使用ClassPathXmlApplicationContext/FileSystemXmlApplicationContext類來加載上下文,這需要永遠。 是否可以只加載部分上下文文件(遞歸),而不需要將原始文件分成模塊?

更新: 我就張貼在這裏我實現使用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

爲什麼不用你需要的beans/config爲測試創建單獨的配置文件,並將它們加載到測試類中? –

+0

配置相當複雜。我想確保正確定義上下文。確保沒有元素被定義兩次,並且沒有缺失的元素。使用整個文件還允許我遍歷幾個元素並對它們進行測試(請注意,我正在測試大量遺留代碼,這使我可以相對快速地執行此操作)。 – krakover

回答

2

我猜這不能開箱即用。但你可以試試這個(這只是一個想法,我不知道它是否可行

Spring支持所謂的lazy initialization這個想法是把這個添加到所有的bean中。 我可以想象兩種方式。

  • 一個簡單的工具,它創建一部開拓創新XML配置文件的副本,並添加default-lazy-init="true"容器級別beans(與s)聲明。
  • 試着做它的程序化。使用Bean後處理器或嘗試「注入」default-lazy-init="true"配置編程
3

如果您嘗試運行「單元」測試,則根本不需要完整的應用程序上下文。只是實例化你想測試的類(也許它的合作者,儘管嘲笑可能是一個更好的選擇),並且你離開。單元測試應集中在單獨的組件上 - 否則它們不是單元測試。

如果您正試圖通過創建應用程序上下文中定義完整的對象層次結構來運行完整集成測試,那麼它可能是由第一重構你的背景和分裂成模塊最簡單的 - 因爲你已經暗示。

+0

+1這對UNIT測試來說似乎是正確的。我同意你的集成測試策略。 – KLE

相關問題