Suporte do Spring Cloud Azure para Testcontainers
Este artigo aplica-se a:✅ Versão 5.19.0
Este artigo descreve como integrar o Spring Cloud Azure ao Testcontainers escrever testes de integração eficazes para seus aplicativos.
Testcontainers é uma estrutura de código aberto para fornecer instâncias leves e descartáveis de bancos de dados, agentes de mensagens, navegadores da Web ou praticamente qualquer coisa que possa ser executada em um contêiner do Docker. Ele se integra ao JUnit, permitindo que você escreva uma classe de teste que pode iniciar um contêiner antes de qualquer um dos testes ser executado. Testcontainers é especialmente útil para escrever testes de integração que conversam com um serviço de back-end real.
A biblioteca spring-cloud-azure-testcontainers
agora oferece suporte a testes de integração para os seguintes serviços do Azure:
- Azure Cosmos DB
- de Armazenamento de Blob do Azure
- de Armazenamento de Filas do Azure
Conexões de serviço
Uma conexão de serviço é uma conexão com qualquer serviço remoto. A configuração automática do Spring Boot pode consumir os detalhes de uma conexão de serviço e usá-los para estabelecer uma conexão com um serviço remoto. Ao fazer isso, os detalhes da conexão têm precedência sobre quaisquer propriedades de configuração relacionadas à conexão.
Quando você usa Testcontainers, você pode criar automaticamente detalhes de conexão para um serviço em execução em um contêiner anotando o campo container na classe de teste.
A anotação @ServiceConnection
é processada por xxxContainerConnectionDetailsFactory
classes registradas com spring.factories
. Essas fábricas criam um ConnectionDetails
bean com base em uma subclasse Container
específica ou no nome da imagem do Docker.
A tabela a seguir fornece informações sobre os detalhes de conexão classes de fábrica suportadas no spring-cloud-azure-testcontainers
JAR:
Detalhes da conexão classe de fábrica | Bean de detalhes da conexão |
---|---|
CosmosContainerConnectionDetailsFactory |
AzureCosmosConnectionDetails |
StorageBlobContainerConnectionDetailsFactory |
AzureStorageBlobConnectionDetails |
StorageQueueContainerConnectionDetailsFactory |
AzureStorageQueueConnectionDetails |
Configurar dependências
A configuração a seguir define as dependências necessárias:
- Cosmos
- de armazenamento de Blob
- de armazenamento em fila
<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>
Usar Testcontainers
O exemplo de código a seguir demonstra o uso básico de Testcontainers:
- Cosmos
- de armazenamento de Blob
- de armazenamento em fila
@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() {
// ...
}
}
Para usar CosmosDBEmulatorContainer
, precisamos preparar um KeyStore
para TLS/SSL. Para obter mais informações, consulte Cosmos DB Azure Module na documentação Testcontainers. Com @ServiceConnection
, essa configuração permite que beans relacionados ao Cosmos DB no aplicativo se comuniquem com o Cosmos DB em execução dentro do contêiner do Docker gerenciado por Testcontainers. Essa ação é feita definindo automaticamente um AzureCosmosConnectionDetails
bean, que é usado pela configuração automática do Cosmos DB, substituindo quaisquer propriedades de configuração relacionadas à conexão.
Amostras
Para obter mais informações, consulte o repositório azure-spring-boot-samples