Stöd för Spring Cloud Azure för Testcontainers
Den här artikeln gäller för:✅ version 5.20.1
Den här artikeln beskriver hur du integrerar Spring Cloud Azure med Testcontainers för att skriva effektiva integreringstester för dina program.
Testcontainers är ett ramverk med öppen källkod för att tillhandahålla slängbara, enkla instanser av databaser, meddelandeköer, webbläsare eller nästan allt som kan köras i en Docker-container. Den integreras med JUnit så att du kan skriva en testklass som kan starta en container innan någon av testerna körs. Testcontainers är särskilt användbart för att skriva integrationstester som pratar med en riktig serverdelstjänst.
spring-cloud-azure-testcontainers
-biblioteket stöder nu integreringstestning för följande Azure-tjänster:
Tjänstanslutningar
En tjänstanslutning är en anslutning till alla fjärrtjänster. Den automatiska konfigurationen av Spring Boot kan använda information om en tjänstanslutning och använda dem för att upprätta en anslutning till en fjärrtjänst. När du gör det har anslutningsinformationen företräde framför eventuella anslutningsrelaterade konfigurationsegenskaper.
När du använder Testcontainers kan du automatiskt skapa anslutningsinformation för en tjänst som körs i en container genom att kommentera containerfältet i testklassen.
Anteckningen @ServiceConnection
bearbetas av xxxContainerConnectionDetailsFactory
klasser som registrerats med spring.factories
. Dessa fabriker skapar en ConnectionDetails
böna baserat på en specifik Container
underklass eller Docker-avbildningsnamnet.
Följande tabell innehåller information om de fabriksklasser för anslutningsinformation som stöds i spring-cloud-azure-testcontainers
JAR:
Fabriksklass för anslutningsinformation | Bean för anslutningsinformation |
---|---|
CosmosContainerConnectionDetailsFactory |
AzureCosmosConnectionDetails |
StorageBlobContainerConnectionDetailsFactory |
AzureStorageBlobConnectionDetails |
StorageQueueContainerConnectionDetailsFactory |
AzureStorageQueueConnectionDetails |
Konfigurera beroenden
Följande konfiguration konfigurerar nödvändiga beroenden:
<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>
Använda Testcontainers
Följande kodexempel visar den grundläggande användningen av Testcontainers:
@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() {
// ...
}
}
Om du vill använda CosmosDBEmulatorContainer
måste vi förbereda en KeyStore
för TLS/SSL. Mer information finns i Cosmos DB Azure Module i dokumentationen om Testcontainers. Med @ServiceConnection
gör den här konfigurationen att Cosmos DB-relaterade bönor i appen kan kommunicera med Cosmos DB som körs i den Testcontainers-hanterade Docker-containern. Den här åtgärden utförs genom att automatiskt definiera en AzureCosmosConnectionDetails
böna, som sedan används av den automatiska konfigurationen i Cosmos DB, vilket åsidosätter eventuella anslutningsrelaterade konfigurationsegenskaper.
Prover
Mer information finns i azure-spring-boot-samples lagringsplats på GitHub.