1
votes

Spring Boot et maven: comment lancer automatiquement des tests unitaires avec deux profils

Cette question fait suite à la question "SpringBoot: comment exécuter des tests deux fois, avec deux fichiers de configuration différents" .

J'utilise pour compiler mon projet en utilisant mvn clean install . Ce faisant, maven lance également mes tests unitaires et je sais immédiatement si mon développement est correct.

Je travaille actuellement sur un module qui intègre une connexion JMS. mon module prend en charge deux bus JMS: EMS et AMQ. Le bus à utiliser est spécifié dans la configuration de mon module

En conséquence, je dois créer deux profils, un pour EMS et un pour AMQ.

Cependant, lorsque je lance mon mvn clean install , je veux que maven lance automatiquement les tests en utilisant les deux profils, pas un seul; Je ne veux pas avoir à le lancer deux fois: mvn clean test -Dspring.profiles.active = ems; mvn clean test -Dspring.profiles.active = amq

Merci pour votre aide


0 commentaires

4 Réponses :


1
votes

Vous pouvez passer les deux profils séparés par une virgule:

mvn clean install -Dspring.profiles.active = ems, amq

Et puis vous aurez deux profils actifs:

Les profils suivants sont actifs: ems, amq


0 commentaires

0
votes

Vous pouvez également spécifier dans le src / test / resources / application.properties les propriétés spécifiques qui s'appliquent à chaque fois que les tests Spring sont exécutés. Cela me semble plus propre que de les spécifier sur la ligne de commande Maven. Pour votre cas:

spring.profiles.active=ems,amq


0 commentaires

1
votes

Je pense qu'il y a un manque de compréhension; Il semble que lorsque j'exécute mes tests avec spring.profiles.active = ems, amq :

  • tous les tests sont lancés une fois
  • les deux profils sont activés

Ce que je veux est différent:

  • lancer tous les tests DEUX FOIS
  • première fois avec le profil ems (et uniquement ems ) activé
  • deuxième fois avec le profil amq (et uniquement amq ) activé

Pour le moment, je n'arrive pas à trouver une solution; chaque indice est le bienvenu

Cordialement


0 commentaires

1
votes

J'ai trouvé une solution à mon problème; une sorte d'astuce basée sur:

  • surcharge du SpringJUnit4ClassRunner
  • redéfinir la méthode run () afin de:

    1. appeler forcer l'utilisation du premier profil
    2. appeler la méthode d'origine run ()
    3. faites de même avec l'autre profil

public class MultiProfileTestRunner extends SpringJUnit4ClassRunner {
...


public void run(RunNotifier notifier) {
    System.setProperty("spring.profiles.active", "ems");
    super.run(notifier);

    System.setProperty("spring.profiles.active", "amq");
    super.run(notifier);
}

Entre les deux appels à super.run () nous devons 'forcer' Spring à recharger son contexte, autrement le changement de profil n'est pas pris en compte

Je l'ai fait en utilisant l'annotation @DirtiesContext (classMode = AFTER_CLASS) sur mes tests


0 commentaires