4 votes

Chargement d'un contexte Spring partiel

Je ne suis pas vraiment un expert de Spring, mais on m'a confié un ancien système avec un énorme fichier de contexte (non séparé en modules).

Je souhaite ajouter quelques tests unitaires - qui valident différentes parties du système, avec la configuration de production actuelle. J'ai commencé à utiliser l'outil ClassPathXmlApplicationContext/FileSystemXmlApplicationContext pour charger le contexte, cependant, cela prend une éternité. Est-il possible de ne charger que des parties du fichier de contexte (de manière récursive) sans avoir à séparer le fichier original en modules ?

Mise à jour : Je vais juste poster ici mon implémentation de la solution de Ralph en utilisant maven : mon 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>

mon test-context-transformation.xml :

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

3voto

Axel Knauf Points 1327

Si vous essayez d'exécuter des tests "unitaires", vous n'aurez pas du tout besoin du contexte complet de l'application. Instanciez simplement la classe que vous voulez tester (et peut-être ses collaborateurs, bien que le mocking soit une meilleure option) et c'est parti. Les tests unitaires doivent se concentrer sur des composants isolés, sinon ce ne sont pas des tests unitaires.

Si vous essayez d'exécuter un test d'intégration en créant la hiérarchie d'objets complète définie dans votre contexte d'application, il est peut-être plus facile de remanier votre contexte et de le diviser en modules, comme vous l'avez déjà suggéré.

2voto

Ralph Points 42744

Je suppose qu'il ne fonctionne pas dans sa version initiale. Mais vous pouvez essayer ceci ( ce n'est qu'une idée, je ne sais pas si cela fonctionne )

Spring soutient les soi-disant Initialisation paresseuse L'idée est de l'ajouter à tous les haricots. J'imagine deux façons de procéder.

  • Un outil simple qui crée une copie du fichier xml de configuration original et y ajoute les éléments suivants default-lazy-init="true" le niveau du conteneur beans (avec s ).
  • Essayez de le faire de manière programmatique. Avec un Bean Post Processor, ou essayez d'"injecter" l'élément default-lazy-init="true" configuration programmatique

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X