4

我不是 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>

我的测试上下文transformation.xml:

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

2 回答 2

3

如果您尝试运行“单元”测试,则根本不需要完整的应用程序上下文。只需实例化您要测试的类(可能还有它的合作者,尽管模拟可能是更好的选择)然后就可以了。单元测试应该孤立地集中在单个组件上——否则它们就不是单元测试。

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

于 2011-08-27T12:36:47.533 回答
2

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

Spring 支持所谓的延迟初始化,其想法是将其添加到所有 bean。我可以想象两种方式。

  • 一个简单的工具,用于创建原始配置 xml 文件的副本并添加default-lazy-init="true"容器级别beans(with s) 声明。
  • 尝试以编程方式进行。使用 Bean 后处理器,或尝试以default-lazy-init="true"编程方式“注入”配置
于 2011-08-27T11:17:25.643 回答