Eine Kurzanleitung zu @TestPropertySource

Eine Kurzanleitung zu @TestPropertySource

 1. Überblick

Spring bietet viele Funktionen, die uns beim Testen unseres Codes helfen. Manchmal müssen wir bestimmte Konfigurationseigenschaften verwenden, um das gewünschte Szenario in unseren Testfällen einzurichten.

In diesen Situationen istwe 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.

Daher sehen wir in diesem kurzen Tutorial Beispiele, in denen wir diese Anmerkung verwenden. Außerdem analysieren wir das Standardverhalten und die von ihm unterstützten Hauptattribute.

Um mehr über das Testen in Spring Boot zu erfahren, empfehlen wir einen Blick auf unsere‘Testing in Spring Boot' tutorial.

2. Abhängigkeiten

Der einfachste Weg, alle erforderlichen Bibliotheken in unser Projekt aufzunehmen, besteht darin, das Artefaktspring-boot-starter-testin unsere Dateipom.xmleinzufügen:


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

Wir können Maven Central überprüfen, um sicherzustellen, dass wir die neueste Version vonstarter libraryverwenden.

3. Verwendung von@TestPropertySource

Stellen wir uns vor, wir verwenden den Wert einer Eigenschaft, indem wir ihn mit der Spring-Annotation@Valueeinfügen:

@Component
public class ClassUsingProperty {

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

    public String retrievePropertyOne() {
        return propertyOne;
    }
}

Anschließend verwenden wir die Annotation auf Sclass-Ebene@TestPropertySource , um eine neue Konfigurationsquelle zu definieren und den Wert dieser Eigenschaft zu überschreiben:

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

Wenn wir diese Testanmerkung verwenden, schließen wir normalerweise auch die@ContextConfiguration one ein, um dieApplicationContext für das Szenario zu laden und zu konfigurieren.

Standardmäßig versucht die Annotation@TestPropertySource, eine Dateipropertiesrelativ zu der Klasse zu laden, die die Annotation deklariert hat.

In diesem Fall benötigen wir beispielsweise die Dateicom/example/testpropertysource/DefaultTest.properties in unserem Klassenpfad, wenn sich unsere Testklasse im Paketcom.example.testpropertysourcebefindet.

Fügen wir es dann unserem Ressourcenordner hinzu:

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

Darüber hinaus können wir den Standardspeicherort der Konfigurationsdatei ändern oder zusätzliche Eigenschaften hinzufügen, die eine noch höhere Priorität haben:

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

Schließlich können wir angeben, ob wirlocations- undproperties-Werte von Oberklassen erben möchten oder nicht. Daher können wir die SattributeinheritLocations undinheritProperties umschalten, die standardmäßigtrue sind.

4. Fazit

In diesem einfachen Beispiel haben wir gelernt, wie Sie die Spring-Annotation von@TestPropertySourceeffektiv verwenden können.

Beispiele für die verschiedenen Szenarien finden Sie inour Github repository.