J'ai un module à plusieurs projets de printemps que je mis en place à l'aide Maven:Les ressources de test des dépendances ne sont pas classpath?
my-root (pom)
- my-logic
- my-webapp (depending on my-logic)
- my-consoleapp (depending on my-logic)
Mes cours d'essai héritent de AbstractTransactionalJUnit4SpringContextTests
et utiliser @ContextCofiguration
pour la mise en place du ApplicationContext
.
E.g. la classe de test pour un contrôleur de ressort:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"classpath:applicationContext-logic-test.xml",
"classpath:applicationContext-web-test.xml"})
public class ControllerTest extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired
private ApplicationContext applicationContext;
...
}
Comme vous pouvez le voir, il existe un fichier XML de configuration par module. J'ai configs séparées pour le test, résidant dans le test/ressources de chaque module (et additionaly ayant le suffixe "-test"). Tout cela fonctionne (la classe compile, s'exécute et les tests JUnit réussissent) si Je lance le test JUnit dans Eclipse.
Maintenant à mon problème: L'exécution du test en utilisant Maven ne fonctionnera PAS! (par exemple avec "Exécuter en tant que"> "Maven install" sur my-root
(j'utilise m2eclipse)). Plus précisément, il va jeter l'exception suivante:
java.io.FileNotFoundException: chemin de classe ressource [applicationContext-logique-test.xml] ne peut pas être ouvert car il n'exist` pas
Il semble que Maven n'ajoute pas les fichiers de my-logic/src/test/resources
au chemin de classe configuré lors de l'exécution des tests unitaires de my-webapp
.
Comment puis-je résoudre ce problème?
Merci beaucoup pour cette excellente réponse! J'ai utilisé cette solution et cela fonctionne. Maintenant que vous l'avez expliqué, il est évident pour moi que les ressources de test de toutes les dépendances (externes) ne sont pas incluses dans le classpath. Comment devraient-ils? Mais d'une manière ou d'une autre, ce serait bien que les ressources de mes propres modules soient incluses. Même si je ne sais pas exactement comment cela fonctionnerait, maintenant que j'y pense;) – apropoz
@apropoz De rien. L'idée avec Maven est que les modules sont autonomes: vous pouvez extraire un seul module sans ses frères et le construire. Tout ce qui impliquerait des chemins relatifs romprait cela, ce qui n'est pas souhaitable. –