Delen via


Spring Cloud Azure-ondersteuning voor Testcontainers

Dit artikel is van toepassing op:✅ versie 5.19.0

In dit artikel wordt beschreven hoe u Spring Cloud Azure integreert met Testcontainers om effectieve integratietests voor uw toepassingen te schrijven.

Testcontainers is een opensource-framework voor het bieden van wegwerpbare, lichtgewicht exemplaren van databases, berichtbrokers, webbrowsers of bijna alles wat in een Docker-container kan worden uitgevoerd. Het integreert met JUnit, zodat u een testklasse kunt schrijven die een container kan starten voordat een van de tests wordt uitgevoerd. Testcontainers zijn vooral handig voor het schrijven van integratietests die communiceren met een echte back-endservice.

De spring-cloud-azure-testcontainers-bibliotheek biedt nu ondersteuning voor integratietests voor de volgende Azure-services:

Serviceverbindingen

Een serviceverbinding is een verbinding met elke externe service. De automatische configuratie van Spring Boot kan de details van een serviceverbinding verbruiken en deze gebruiken om een verbinding met een externe service tot stand te brengen. Als u dit doet, hebben de verbindingsgegevens voorrang op eventuele verbindingsgerelateerde configuratie-eigenschappen.

Wanneer u Testcontainers gebruikt, kunt u automatisch verbindingsgegevens maken voor een service die in een container wordt uitgevoerd door aantekeningen te maken aan het containerveld in de testklasse.

De @ServiceConnection aantekening wordt verwerkt door xxxContainerConnectionDetailsFactory klassen die zijn geregistreerd bij spring.factories. Deze factory's maken een ConnectionDetails bean op basis van een specifieke Container subklasse of de naam van de Docker-installatiekopieën.

De volgende tabel bevat informatie over de factoryklassen voor verbindingsgegevens die worden ondersteund in de spring-cloud-azure-testcontainers JAR:

Fabrieksklasse verbindingsdetails Verbindingsdetails van de bean
CosmosContainerConnectionDetailsFactory AzureCosmosConnectionDetails
StorageBlobContainerConnectionDetailsFactory AzureStorageBlobConnectionDetails
StorageQueueContainerConnectionDetailsFactory AzureStorageQueueConnectionDetails

Afhankelijkheden instellen

Met de volgende configuratie worden de vereiste afhankelijkheden ingesteld:

<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>

Testcontainers gebruiken

In het volgende codevoorbeeld ziet u het basisgebruik van 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() {
        // ...
    }
}

Als u CosmosDBEmulatorContainerwilt gebruiken, moeten we een KeyStore voorbereiden voor TLS/SSL. Zie Cosmos DB Azure Module in de documentatie voor Testcontainers voor meer informatie. Met @ServiceConnectionkan met deze configuratie cosmos DB-gerelateerde bonen in de app communiceren met Cosmos DB die wordt uitgevoerd in de door Testcontainers beheerde Docker-container. Deze actie wordt uitgevoerd door automatisch een AzureCosmosConnectionDetails bean te definiëren, die vervolgens wordt gebruikt door de automatische configuratie van Cosmos DB, waarbij eventuele verbindingsgerelateerde configuratie-eigenschappen worden overschreven.

Monsters

Zie de azure-spring-boot-samples opslagplaats op GitHub voor meer informatie.