Bonjour,
J'ai un fichier test.properties présent dans /monprojet/src/test/resources/test.properties.
Dans ce fichier, on trouve notamment :
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 :
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.
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;
}
} |
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
Partager