加载部分Spring上下文

时间:2011-08-27 05:00:10

标签: spring unit-testing applicationcontext

我不是一个Spring专家,但是给了一个带有大量上下文文件的遗留系统(不分成模块)。

我想添加一些单元测试 - 用实际的生产配置验证系统的不同部分。 我开始使用ClassPathXmlApplicationContext/FileSystemXmlApplicationContext类来加载上下文,但这需要永远。 是否可以只加载上下文文件的一部分(递归)而无需将原始文件分成模块?

更新: 我将在这里发布我使用maven实现Ralph的解决方案: 我的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>

my test-context-transformation.xml:

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

2 个答案:

答案 0 :(得分:3)

如果您尝试运行“单元”测试,则根本不需要完整的应用程序上下文。只是实例化你想要测试的类(也许是它的合作者,虽然模拟可能是一个更好的选择)然后你就去了。单元测试应该单独关注单个组件 - 否则它们不是单元测试。

如果您尝试通过创建在应用程序上下文中定义的完整对象层次结构来运行完整的集成测试,那么首先重构您的上下文并将其拆分为模块可能是最简单的 - 就像您一样已经建议了。

答案 1 :(得分:2)

我想它开箱即用。但你可以尝试这个(这只是一个想法,我不知道它是否有效

Spring支持所谓的lazy initialization,其想法是将其添加到所有bean中。 我可以想象两种方式。

  • 一个简单的工具,用于创建orignal配置xml文件的副本,并添加default-lazy-init="true"容器级别beans(带s)声明。
  • 尝试以编程方式执行此操作。使用Bean Post处理器,或尝试“注入”default-lazy-init="true"配置程序化