Sdílet prostřednictvím


Podpora Spring Cloud Azure pro testcontainery

Tento článek se vztahuje na:✅ verze 5.20.1

Tento článek popisuje, jak integrovat Spring Cloud Azure s testcontainery k zápisu efektivních integračních testů pro vaše aplikace.

Testcontainers je opensourcová architektura pro poskytování odkládacích, jednoduchých instancí databází, zprostředkovatelů zpráv, webových prohlížečů nebo čehokoli, co může běžet v kontejneru Dockeru. Integruje se s JUnit a umožňuje psát testovací třídu, která může spustit kontejner před spuštěním jakéhokoli testu. Testcontainery jsou zvláště užitečné pro psaní integračních testů, které komunikují se skutečnou back-endovou službou.

Knihovna spring-cloud-azure-testcontainers teď podporuje testování integrace pro následující služby Azure:

Připojení služeb

Připojení služby je připojení k jakékoli vzdálené službě. Automatická konfigurace Spring Bootu může využívat podrobnosti o připojení služby a používat je k navázání připojení ke vzdálené službě. Při tom mají podrobnosti o připojení přednost před všemi vlastnostmi konfigurace souvisejícími s připojením.

Při použití testcontainers můžete automaticky vytvořit podrobnosti připojení pro službu spuštěnou v kontejneru tak, že do pole kontejneru v testovací třídě označíte pole kontejneru.

@ServiceConnection poznámku zpracovává třídy xxxContainerConnectionDetailsFactory zaregistrované v spring.factories. Tyto továrny vytvoří ConnectionDetails bean na základě konkrétní podtřídy Container nebo názvu image Dockeru.

Následující tabulka obsahuje informace o třídách objektu pro vytváření podrobností připojení podporovaných v spring-cloud-azure-testcontainers JAR:

Třída objektu pro vytváření podrobností připojení Podrobnosti připojení bean
CosmosContainerConnectionDetailsFactory AzureCosmosConnectionDetails
StorageBlobContainerConnectionDetailsFactory AzureStorageBlobConnectionDetails
StorageQueueContainerConnectionDetailsFactory AzureStorageQueueConnectionDetails

Nastavení závislostí

Následující konfigurace nastaví požadované závislosti:

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

Použití testcontainerů

Následující příklad kódu ukazuje základní použití 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() {
        // ...
    }
}

Abychom mohli používat CosmosDBEmulatorContainer, musíme připravit KeyStore na TLS/SSL. Další informace najdete v modulu Azure Cosmos DB v dokumentaci k testcontainerům. Díky @ServiceConnectiontato konfigurace umožňuje službě Cosmos DB v aplikaci komunikovat se službou Cosmos DB spuštěnou uvnitř kontejneru Docker spravovaného službou Testcontainers. Tato akce se provádí tak, že automaticky definujete AzureCosmosConnectionDetails bean, který pak používá automatická konfigurace služby Cosmos DB a přepisuje všechny vlastnosti konfigurace související s připojením.

Vzorky

Další informace najdete v azure-spring-boot-samples úložišti na GitHubu.