Dela via


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 CosmosDBEmulatorContainermåste vi förbereda en KeyStore för TLS/SSL. Mer information finns i Cosmos DB Azure Module i dokumentationen om Testcontainers. Med @ServiceConnectiongö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.