12 April 2021
L'idée pincipale est de pouvoir avoir des tests configurable par fichier de configuration, et executable par maven dans un environnement container.
Les tests dont je parle ici son au départ des tests JUnit4. L'application n'utilisait pas Spring Boot au départ.
Dans mes tests de KdmMailFetcher, j'utilise maintenant deux mécanismes : Spring, pour initier les tests comme des beans, ou bien initier l'assemblage des beans pour les tests d'intégration, et junitparams, pour faire des tests en série à partir d'un CSV.
J'utilise pour ma part, le fonctionnement qui consiste à alimenter les paramètres d'un test avec les lignes d'un fichier CSV. Permet de documenter les résultats de parcours de mails et des KDM que l'on est sensé y trouver.
La difficulté, pour le moment irrésolue, c'est que le csv qui paramètre ce test doit être défini de manière constante.
Baeldung : A Quick Guide to Spring @Value
Rappel sur la façon dont les properties peuvent être utilisées pour initialiser les beans.
Rappel fonctionnement des Rules
* Guide to JUnit 4 Rules
Baeldung : Spring Properties File Outside jar](https://www.baeldung.com/spring-properties-file-outside-jar)
Je n'ai pas réussi à faire fonctionner le chargement par les rules.
@ClassRule
public static final SpringClassRule SPRING_CLASS_RULE = new SpringClassRule();
Ne produit rien, il doit falloir appeler quelque chose en plus.
Un exemle est donné, qui fonctionne avec le runner Parameterized
.
// [...]
// Manually config for spring to use Parameterised
private TestContextManager testContextManager;
// [...]
@Before // Note 2
public void setUp() throws Exception {
this.testContextManager = new TestContextManager(getClass());
this.testContextManager.prepareTestInstance(this);
}
Cela fonctionne également avec mon exemple qui utilise le runner JunitParams.
Du coup, j'ai essayé de convertir le test en utilisant le runner Parameterized : fonctionne, mais ne résoud pas le problème de devoir charger l'emplacement dans une fonction statique, donc sans pouvoir utiliser le paramètre configuré par Spring.
Par ailleurs, on ne peut pas positionner une valeur statique en utilisant @Autowired.
A noter que Parameterized a évolué dans JUnit5 et prévoit en particuleir une fonction pour les fichiers csv.
La mise en oeuvre demande une adaption des tests, et d'invalider le choix par défaut dans spring boot, qui utile Junit4.