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.