Spring Cloud Azure-Unterstützung für Testcontainer
Dieser Artikel gilt für:✅ Version 5.19.0
In diesem Artikel wird beschrieben, wie Sie Spring Cloud Azure in Testcontainer integrieren, um effektive Integrationstests für Ihre Anwendungen zu schreiben.
Testcontainers ist ein Open-Source-Framework zum Bereitstellen von Ausschütten, einfachen Instanzen von Datenbanken, Nachrichtenbrokern, Webbrowsern oder alles, was in einem Docker-Container ausgeführt werden kann. Es ist in JUnit integriert, sodass Sie eine Testklasse schreiben können, die einen Container starten kann, bevor eine der Tests ausgeführt wird. Testcontainers ist besonders nützlich für das Schreiben von Integrationstests, die mit einem echten Back-End-Dienst sprechen.
Die spring-cloud-azure-testcontainers
-Bibliothek unterstützt jetzt Integrationstests für die folgenden Azure-Dienste:
Dienstverbindungen
Eine Dienstverbindung ist eine Verbindung mit einem beliebigen Remotedienst. Die Autokonfiguration von Spring Boot kann die Details einer Dienstverbindung nutzen und diese verwenden, um eine Verbindung mit einem Remotedienst herzustellen. Dabei haben die Verbindungsdetails Vorrang vor verbindungsbezogenen Konfigurationseigenschaften.
Wenn Sie Testcontainer verwenden, können Sie automatisch Verbindungsdetails für einen Dienst erstellen, der in einem Container ausgeführt wird, indem Sie das Containerfeld in der Testklasse kommentieren.
Die @ServiceConnection
Anmerkung wird von xxxContainerConnectionDetailsFactory
Klassen verarbeitet, die mit spring.factories
registriert sind. Diese Fabriken erstellen eine ConnectionDetails
Bean basierend auf einer bestimmten Container
Unterklasse oder dem Docker-Imagenamen.
Die folgende Tabelle enthält Informationen zu den in der spring-cloud-azure-testcontainers
JAR unterstützten Verbindungsdetails-Factoryklassen:
Verbindungsdetails Factoryklasse | Verbindungsdetailsanker |
---|---|
CosmosContainerConnectionDetailsFactory |
AzureCosmosConnectionDetails |
StorageBlobContainerConnectionDetailsFactory |
AzureStorageBlobConnectionDetails |
StorageQueueContainerConnectionDetailsFactory |
AzureStorageQueueConnectionDetails |
Einrichten von Abhängigkeiten
Die folgende Konfiguration richtet die erforderlichen Abhängigkeiten ein:
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>azure</artifactId>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-testcontainers</artifactId>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-cosmos</artifactId>
</dependency>
Verwenden von Testcontainern
Im folgenden Codebeispiel wird die grundlegende Verwendung von Testcontainern veranschaulicht:
@SpringBootTest
@Testcontainers
@ImportAutoConfiguration(classes = { AzureGlobalPropertiesAutoConfiguration.class, AzureCosmosAutoConfiguration.class})
public class CosmosTestcontainersTest {
@TempDir
private static File tempFolder;
@Autowired
private CosmosClient client;
@Container
@ServiceConnection
static CosmosDBEmulatorContainer cosmos = new CosmosDBEmulatorContainer(
DockerImageName.parse("mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest"));
@BeforeAll
static void setup() {
cosmos.start();
Path keyStoreFile = new File(tempFolder, "azure-cosmos-emulator.keystore").toPath();
KeyStore keyStore = cosmos.buildNewKeyStore();
try {
keyStore.store(Files.newOutputStream(keyStoreFile.toFile().toPath()), cosmos.getEmulatorKey().toCharArray());
} catch (Exception e) {
throw new RuntimeException(e);
}
System.setProperty("javax.net.ssl.trustStore", keyStoreFile.toString());
System.setProperty("javax.net.ssl.trustStorePassword", cosmos.getEmulatorKey());
System.setProperty("javax.net.ssl.trustStoreType", "PKCS12");
}
@Test
void test() {
// ...
}
}
Um CosmosDBEmulatorContainer
zu verwenden, müssen wir eine KeyStore
für TLS/SSL vorbereiten. Weitere Informationen finden Sie unter Cosmos DB Azure Module in der Testcontainers-Dokumentation. Mit @ServiceConnection
ermöglicht diese Konfiguration Cosmos DB-bezogenen Bohnen in der App, mit Cosmos DB zu kommunizieren, die im Testcontainers-verwalteten Docker-Container ausgeführt wird. Diese Aktion erfolgt durch die automatische Definition einer AzureCosmosConnectionDetails
Bean, die dann von der Autokonfiguration von Cosmos DB verwendet wird und alle verbindungsbezogenen Konfigurationseigenschaften außer Kraft gesetzt wird.
Proben
Weitere Informationen finden Sie in den Azure-spring-boot-samples Repository auf GitHub.