Megosztás a következőn keresztül:


Spring Cloud Azure-támogatás a Testcontainershez

Ez a cikk azt ismerteti, hogyan integrálhatja a Spring Cloud Azure-t Testcontainers az alkalmazások hatékony integrációs tesztjeinek megírásához.

Testcontainers egy nyílt forráskódú keretrendszer, amely lehetővé teszi az adatbázisok, üzenetközvetítők, webböngészők és szinte bármi egyszerű példányát, amely egy Docker-tárolóban futtatható. Integrálható a JUnittal, lehetővé téve egy tesztosztály írását, amely elindíthat egy tárolót a tesztek futtatása előtt. A tesztkontainerek különösen hasznosak olyan integrációs tesztek írásához, amelyek valós háttérszolgáltatással kommunikálnak.

A spring-cloud-azure-testcontainers kódtár mostantól támogatja az integrációs tesztelést a következő Azure-szolgáltatásokhoz:

Szolgáltatáskapcsolatok

A szolgáltatáskapcsolat bármely távoli szolgáltatáshoz kapcsolódik. A Spring Boot automatikus konfigurációja felhasználhatja a szolgáltatáskapcsolat részleteit, és segítségével kapcsolatot létesíthet egy távoli szolgáltatással. Ennek során a kapcsolat részletei elsőbbséget élveznek a kapcsolattal kapcsolatos konfigurációs tulajdonságokkal szemben.

A Testcontainers használatakor automatikusan létrehozhat kapcsolatadatokat egy tárolóban futó szolgáltatáshoz a tesztosztály tároló mezőjének megjegyzésével.

A @ServiceConnection jegyzetet a xxxContainerConnectionDetailsFactoryregisztrált spring.factories osztályok dolgozzák fel. Ezek a gyárak létrehoznak egy ConnectionDetails babot egy adott Container alosztály vagy a Docker-rendszerkép neve alapján.

Az alábbi táblázat a spring-cloud-azure-testcontainers JAR-ban támogatott kapcsolati adatok gyári osztályairól nyújt tájékoztatást:

Kapcsolat részletei gyári osztály Kapcsolat részletei bean
CosmosContainerConnectionDetailsFactory AzureCosmosConnectionDetails
StorageBlobContainerConnectionDetailsFactory AzureStorageBlobConnectionDetails
StorageQueueContainerConnectionDetailsFactory AzureStorageQueueConnectionDetails

Függőségek beállítása

A következő konfiguráció állítja be a szükséges függőségeket:

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

Tesztkontainerek használata

Az alábbi példakód a Testcontainers alapszintű használatát mutatja be:

@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() {
        // ...
    }
}

A CosmosDBEmulatorContainerhasználatához elő kell készítenünk egy KeyStore TLS/SSL-hez. További információ: Cosmos DB Azure-modul a Testcontainers dokumentációjában. A @ServiceConnectionlehetővé teszi, hogy a Cosmos DB-hez kapcsolódó babok az alkalmazásban kommunikáljanak a Testcontainers által felügyelt Docker-tárolóban futó Cosmos DB-vel. Ezt a műveletet úgy hajthatja végre, hogy automatikusan definiál egy AzureCosmosConnectionDetails babot, amelyet aztán a Cosmos DB automatikus konfigurációja használ, felülírva a kapcsolattal kapcsolatos konfigurációs tulajdonságokat.

Minták

További információ: azure-spring-boot-samples adattár a GitHubon.