2 votes

Emplacement commun pour les ressources de test dans un projet Maven

Je prépare un environnement de test pour mon projet.
J'ai une série de projets Maven et certains des projets utilisent une configuration commune pour les tests de ressorts de printemps (test-context.xml). Tous les tests fonctionnent lorsque j'ai cette configuration dans src\test\resources de chaque projet. Lorsque je veux déplacer cette configuration vers un projet séparé (project-test) pour éliminer les doublons dans chaque projet, j'obtiens une Exception :

Caused by: java.io.FileNotFoundException: le fichier de ressources du chemin de classe [test-context.xml] ne peut pas être ouvert car il n'existe pas
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:157)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328)
    ... 39 more
  • J'ai ajouté une dépendance Maven à project-tests dans le projet avec les tests
  • le test-context.xml ne va pas dans le répertoire target
  • quand je mets mes ressources dans src/main/resources au lieu de src/test/resources cela fonctionne

Quelle est la meilleure façon d'ajouter la ressource de test d'un autre projet pour qu'elle soit visible d'un test TestNG ?
Est-ce que la déplacer dans src/main/resources est la meilleure solution dans cette situation ?

3voto

ramsinb Points 1496

Vous ne pouvez pas simplement dépendre du projet-tests et vous attendre à ce que la ressource de src/test/resources soit incluse. Vous devrez construire un JAR de test à partir de votre projet project-tests. Heureusement pour vous, cela est assez simple et a été très bien expliqué dans un autre fil SO Partager du code de test dans Maven

L'idée de base est de générer un fichier JAR de test à partir du projet project-tests avec un classifier, puis d'utiliser cela comme dépendance dans votre projet. Cette approche est la meilleure pratique pour ce que vous essayez de faire.

1voto

Jean-Rémy Revy Points 2920

La solution de Ramsinb est correcte. Mais si vous ne traitez que des ressources, préférez un assemblage qui est mieux conçu pour cela, et partagez un zip.

Projet Zip :

pom.xml

com.mycompany
cfg_dev
1.1.0

            org.apache.maven.plugins
            maven-assembly-plugin

                    cfg-main-resources

                        single

                    package

                            /src/main/assembly/resources.xml

Descripteur d'assemblage : Cela produira cet artefact : cfg_dev-1.1.0-resources.zip Veuillez noter que

  1. il s'agit d'une archive zip
  2. le "classifier" est resources (comme le nom de l'assemblage précédent)

    resources zip false src/main/resources

Projet Principal :

pom.xml

Veuillez noter que

  1. cela dépend d'une archive zip
  2. la dépendance "classifier" est resources (comme le nom de l'assemblage précédent)

        com.mycompany
        cfg_dev
        ${project.version}
        resources
        zip
        test
    
    ...

    src/test/resources true ${project.build.directory}/test-resources true

            org.apache.maven.plugins
            maven-dependency-plugin
    
                    unpack-cfg-test-resources
    
                        unpack-dependencies
    
                    generate-test-resources
    
                        ${project.build.directory}/test-resources
                        cfg_dev
                        ${project.groupId}
                        true
                        pom
                        test

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