Bonjour,
J'ai un fichier test.properties présent dans /monprojet/src/test/resources/test.properties.
Dans ce fichier, on trouve notamment :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
testprofile=postgre,hibernate,batch, etc...
Mon but est de créer différentes annotations pour faciliter l'écriture de nos tests.
Pour cela, j'ai donc débuté par une annotation pour tester nos traitements batch :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@ContextConfiguration(locations = {"classpath:/conf/app-config.xml", "classpath*:/**/traitement*Context*.xml",
        "classpath*:batchContext-resources.xml", "classpath*:/applicationContext-*.xml"})
@ActiveProfiles(resolver = CustomActiveProfilesResolver.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
@Transactional
@Commit
@Inherited
public @interface ApplicationContexteSpringAvecTransactionTest
{
 
}
L'idée est donc dans CustomActiveProfilesResolver de simplement récupérer la liste des profiles à définir comme actifs, grâce à un ressourceBundle.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class CustomActiveProfilesResolver implements ActiveProfilesResolver
{
 
    /** Nom de la clé dans le fichier test.properties qui contient le nom des profils actifs. */
    private static final String PROFILE = "testprofile";
 
    @Override
    public String[] resolve(Class<?> testClass)
    {
        String[] profileFound ;
        String profileTestProperties = monBundle.getProperty(PROFILE);
 
        // On définit la virgule comme séparateur
        Pattern laPatternSeparVirgule = Pattern.compile("[,]");
 
        if (profileTestProperties == null)
        {
 
            throw new IngerableException(
                "Vous devez definir les profiles dans le fichier tests.properties.");
        }
 
        else
        {
            List<String> listeDeStrings = new ArrayList<>();
 
            String[] sousChaines = laPatternSeparVirgule.split(profileTestProperties);
 
            for (String chaine : sousChaines)
            {
                listeDeStrings.add(chaine);
            }
 
            profileFound = new String[listeDeStrings.size()];
            listeDeStrings.toArray(profileFound);
 
        }
 
        return profileFound;
    }
}

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  public static String getProperty(String nompropriete)
    {
        String propriete = null;
 
        try
        {
            propriete = appliResourceBundle.getString(nompropriete);
        }
        catch (RuntimeException rte)
        {
            LOG.warn("Impossible de recuperer la propriete dont la cle est " + nompropriete != null ? nompropriete
                : "null" + " de l'application");
            LOG.debug("Cause :", rte);
        }
        return propriete;
    }
Cela fonctionnait parfaitement avant que je ne migre vers SpringBoot et SpringBootTest.

Mes questions sont donc :
- est-il possible de définir avec SpringBoot une série de profils actifs pour les tests à partir d'un fichier test.properties?
- si oui, comment? (je précise que j'ai essayé beaucoup de choses, mais que je tourne en rond, parce que mon fichier n'est jamais lu).

D'avance, merci pour votre aide.
Bonne journée.
Cordialement,
Thomas