4

私はSpringの専門家ではありませんが、巨大なコンテキストファイル(モジュールに分割されていない)を持つレガシーシステムを与えられました。

システムのさまざまな部分を実際の運用構成で検証する単体テストをいくつか追加したいと思います。ClassPathXmlApplicationContext/FileSystemXmlApplicationContextクラスを使用してコンテキストをロードし始めましたが、それには永遠に時間がかかります。元のファイルをモジュールに分割する必要なく、コンテキスト ファイルの一部のみを (再帰的に) ロードすることは可能ですか?

更新: Maven を使用した Ralph のソリューションの実装をここに投稿します: my 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>

私のテストコンテキスト変換.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に追加するという考えです。私は2つの方法を想像できます。

  • 元の構成 xml ファイルのコピーを作成しdefault-lazy-init="true"、コンテナー レベルbeans( with s) 宣言を追加する単純なツール。
  • プログラムでやってみてください。Bean ポスト プロセッサを使用するか、default-lazy-init="true"プログラムで構成を「注入」してみてください
于 2011-08-27T11:17:25.643 に答える