Un guide rapide sur @TestPropertySource

Un guide rapide sur @TestPropertySource

 1. Vue d'ensemble

Spring propose de nombreuses fonctionnalités pour nous aider à tester notre code. Parfois, nous devons utiliser des propriétés de configuration particulières afin de configurer le scénario souhaité dans nos cas de test.

Dans ces situations,we can make use of the @TestPropertySource annotation. With this tool, we can define configuration sources that have higher precedence than any other source used in the project.

Par conséquent, dans ce court didacticiel, nous verrons des exemples d'utilisation de cette annotation. Nous analyserons également son comportement par défaut et les principaux attributs qu'il prend en charge.

Pour en savoir plus sur les tests dans Spring Boot, nous vous suggérons de jeter un œil à nos‘Testing in Spring Boot' tutorial.

2. Les dépendances

Le moyen le plus simple d'inclure toutes les bibliothèques requises dans notre projet est d'ajouter l'artefactspring-boot-starter-test dans notre fichierpom.xml:


    org.springframework.boot
    spring-boot-starter-test
    test
    2.0.5.RELEASE

Nous pouvons vérifier Maven Central pour vérifier que nous utilisons la dernière version desstarter library.

3. Comment utiliser@TestPropertySource

Imaginons que nous utilisions la valeur d'une propriété en l'injectant à l'aide de l'annotation Spring@Value:

@Component
public class ClassUsingProperty {

    @Value("${example.testpropertysource.one}")
    private String propertyOne;

    public String retrievePropertyOne() {
        return propertyOne;
    }
}

Nous utiliserons ensuite l'annotation de niveau@TestPropertySource class pour définir une nouvelle source de configuration et remplacer la valeur de cette propriété:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = ClassUsingProperty.class)
@TestPropertySource
public class DefaultTest {

    @Autowired
    ClassUsingProperty classUsingProperty;

    @Test
    public void givenDefaultTPS_whenVariableRetrieved_thenDefaultFileReturned() {
        String output = classUsingProperty.retrievePropertyOne();

        assertThat(output).isEqualTo("default-value");
    }
}

En règle générale, chaque fois que nous utilisons cette annotation de test, nous incluons également le sone@ContextConfiguration afin de charger et de configurer lesApplicationContext pour le scénario.

Par défaut, l'annotation@TestPropertySource tente de charger un fichierproperties par rapport à la classe qui a déclaré l'annotation.

Dans ce cas, par exemple, si notre classe de test est dans le packagecom.example.testpropertysource, alors nous aurons besoin du fichiercom/example/testpropertysource/DefaultTest.properties dans notre chemin de classe.

Ajoutons-le à notre dossier de ressources, puis:

# DefaultTest.properties
example.testpropertysource.one=default-value

De plus, nous pouvons modifier l'emplacement du fichier de configuration par défaut ou ajouter des propriétés supplémentaires qui auront une priorité encore plus élevée:

@TestPropertySource(locations = "/other-location.properties",
  properties = "example.testpropertysource.one=other-property-value")

Enfin, nous pouvons spécifier si nous voulons hériter ou non des valeurslocations etproperties des superclasses. Par conséquent, nous pouvons basculer les attributsinheritLocations etinheritProperties , qui sonttrue par défaut.

4. Conclusion

Avec cet exemple simple, nous avons appris à utiliser efficacement l'annotation Spring@TestPropertySource.

Nous pouvons trouver des exemples pour les différents scénarios enour Github repository.