Una guida rapida a @TestPropertySource

1. Panoramica

La primavera offre molte funzionalità per aiutarci a testare il nostro codice. A volte dobbiamo utilizzare particolari proprietà di configurazione per impostare lo scenario desiderato nei nostri casi di test.

In queste situazioni, possiamo utilizzare l' annotazione @TestPropertySource . Con questo strumento possiamo definire sorgenti di configurazione che hanno una precedenza maggiore rispetto a qualsiasi altra sorgente usata nel progetto.

Quindi, in questo breve tutorial, vedremo esempi in cui usiamo questa annotazione. Inoltre, analizzeremo il suo comportamento predefinito e gli attributi principali che supporta.

Per saperne di più sui test in Spring Boot, suggeriamo di dare un'occhiata al nostro tutorial "Test in Spring Boot".

2. Dipendenze

Il modo più semplice per includere tutte le librerie richieste nel nostro progetto è aggiungere l' artefatto spring-boot-starter-test nel nostro file pom.xml :

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

Possiamo controllare Maven Central per verificare che stiamo utilizzando l'ultima versione della libreria iniziale.

3. Come utilizzare @TestPropertySource

Immaginiamo di utilizzare il valore di una proprietà iniettandolo utilizzando l' annotazione @Value Spring:

@Component public class ClassUsingProperty { @Value("${baeldung.testpropertysource.one}") private String propertyOne; public String retrievePropertyOne() { return propertyOne; } }

Utilizzeremo quindi l' annotazione a livello di classe @TestPropertySource per definire una nuova origine di configurazione e sovrascrivere il valore di quella proprietà:

@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"); } }

In genere, ogni volta che usiamo questa annotazione di test includeremo anche quella @ContextConfiguration in modo da caricare e configurare ApplicationContext per lo scenario.

Per impostazione predefinita, l' annotazione @TestPropertySource tenta di caricare un file delle proprietà relativo alla classe che ha dichiarato l'annotazione.

In questo caso, ad esempio, se la nostra classe di test è nel pacchetto com.baeldung.testpropertysource , avremo bisogno del file com / baeldung / testpropertysource / DefaultTest.properties nel nostro classpath.

Aggiungiamolo alla nostra cartella delle risorse, quindi:

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

Inoltre, possiamo modificare il percorso del file di configurazione predefinito o aggiungere proprietà extra che avranno una precedenza ancora maggiore:

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

Infine, possiamo specificare se vogliamo ereditare posizioni e valori di proprietà dalle superclassi o meno. Quindi, possiamo alternare gli attributi inheritLocations e inheritProperties , che sono veri per impostazione predefinita.

4. Conclusione

Con questo semplice esempio, abbiamo imparato come utilizzare l' annotazione @TestPropertySource Spring in modo efficace.

Possiamo trovare esempi per i diversi scenari nel nostro repository Github.