2011-08-27 91 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

相关问题