2008-12-11 6 views
22

J'ai une classe de test dans un module qui étend une autre classe de test dans l'un de ses modules de dépendance. Comment puis-je importer le code de test de la dépendance dans la portée de test du module dépendant? Pour analphabétiser, j'ai deux modules, "module-un" étant une dépendance de "module-deux". SubTestCase est une sous-classe de TestCase.Classe de test extension de la classe de test dans le module de dépendances

 
module-one 
      \src\test\java\com\example\TestCase.java 
module-two 
      \src\test\java\com\example\SubTestCase.java 

Mais la construction échoue parce que le code de test du « module un » n'est pas importé dans « module deux », juste le code principal.

Répondre

4

Habituellement, cela est résolu en construisant et en déployant des fichiers modulename-test.jar en plus du fichier modulename.jar habituel. Vous déployez ces derniers pour les mettre comme des artefacts réguliers. Ce n'est pas totalement sans faille, mais fonctionne décemment pour les artefacts de code.

Ensuite, vous ajouteriez des dépendances de portée de test aux jars de test aux autres modules.

Vous pouvez également résoudre ce problème en plaçant des artefacts de portée de test dans la portée "principale" dans un module distinct, puis l'inclure dans la portée de test régulière dans d'autres modules. Cette solution ne fonctionne pas très bien dans une construction multi-module où chaque module exporte des artefacts de test, puisque vous obtenez essentiellement des modules 2N.

Beaucoup d'entre nous abandonnent réellement ces deux solutions lorsque nous réalisons que le nombre de classes est assez limité et qu'il y a des problèmes associés à ces deux solutions. Nous les plaçons simplement dans un paquet nommé de manière appropriée dans la portée "principale". Je n'arrête pas d'oublier pourquoi les deux premières solutions sont douloureuses.

31

Vous pouvez déployer le code de test en tant qu'artefact supplémentaire en utilisant maven-jar-plugin's test-jar goal. Il sera attaché au projet et déployé avec les tests du classificateur. D'autres projets peuvent ensuite référencer le test jar en déclarant le classificateur de tests dans la dépendance.

<dependency> 
    <groupId>name.seller.rich</groupId> 
    <artifactId>foo</artifactId> 
    <version>1.0.0</version> 
    <classifier>tests</classifier> 
    <scope>test</scope> 
</dependency> 
+0

J'ai travaillé avec brio pour moi, Rich, merci! Cela devrait être la réponse acceptée. La réponse de krosenvolds est une discussion juste mais manque cette utilisation très appropriée de la fonctionnalité maven-jar-plugin. –

+0

Les dépendances des tests de foo sont-elles également incluses? – TheConstructor

+0

Ok, un test rapide dit non. Des idées pour inclure les sources de test et leurs dépendances? – TheConstructor

8

En ce qui concerne la réponse de Rich Vendeur: L'utilisation de <classifier>tests</classifier> est démodées voir le user’s guide.

J'utilise Maven 2.2.1 et Maven-jar-plugin 2.2 et il a fallu pour commutateur <type>test-jar</type> au lieu de <classifier>tests</classifier>.

Notez que les tests jar ne sont pas transitifs et que vous devrez peut-être les ajouter explicitement.

<project> 
    ... 
    <dependencies> 
     <dependency> 
      <groupId>name.seller.rich</groupId> 
      <artifactId>foo</artifactId> 
      <version>1.0.0</version> 
      <type>test-jar</type> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 
    ... 
</project> 

mise à jour suivante Mike Sokolov commentaire:

de guilde de l'utilisateur pour Maven 3 mis à jour le 28/03/2014 voir le lien ci-dessus par exemple

Notez que les éditions précédentes de ce guide ont suggéré d'utiliser < < < classificateur> tests </classificateur> au lieu de < type> test-jar </type>. Bien que cela fonctionne actuellement dans certains cas, il ne fonctionne pas correctement lors de la construction d'un réacteur du module JAR de test et tout consommateur si une phase de cycle de vie avant l'installation est appelée. Dans ce cas, Maven ne résoudra pas le test JAR de la sortie du réacteur mais du dépôt local/distant. Apparemment, le JAR de les dépôts peut être obsolète ou complètement manquant, provoquant une erreur de construction (voir MNG-2045).

+0

Les dépendances des tests de foo sont-elles également incluses? – TheConstructor

+0

Toutes les dépendances de test de foo seront automatiquement incluses. Si Foo dépend des tests de la barre, vous devez appliquer la même approche pour Foo/Bar Voir (la réponse de Rich) sinon foo ne passera pas test-compile –

+0

Non c'est un tas de dépendances normales. J'ai juste aimé l'idée de par exemple spécifiant dans foo quelle base de données utiliser dans les tests d'intégration et garder la barre libre du nom concret de la base de données. – TheConstructor

Questions connexes