Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo descreve como integrar o Spring Cloud Azure ao Testcontainers para gravar testes de integração eficazes para seus aplicativos.
Testcontainers é uma estrutura de software livre para fornecer instâncias descartáveis e leves 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 possa 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 dá suporte ao teste de integração para os seguintes serviços 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.
Ao usar Testcontainers, você pode criar automaticamente detalhes de conexão para um serviço em execução em um contêiner anotando o campo de contêiner na classe de teste.
A anotação @ServiceConnection é processada por classes xxxContainerConnectionDetailsFactory registradas com spring.factories. Essas fábricas criam um bean ConnectionDetails com base em uma subclasse Container específica ou no nome da imagem do Docker.
A tabela a seguir fornece informações sobre as classes de fábrica de detalhes de conexão com suporte no JAR spring-cloud-azure-testcontainers:
| Classe de fábrica de detalhes da conexão | Bean de detalhes da conexão |
|---|---|
CosmosContainerConnectionDetailsFactory |
AzureCosmosConnectionDetails |
StorageBlobContainerConnectionDetailsFactory |
AzureStorageBlobConnectionDetails |
StorageQueueContainerConnectionDetailsFactory |
AzureStorageQueueConnectionDetails |
Configurar dependências
A configuração a seguir configura as dependências necessárias:
- Cosmos
-
de Armazenamento de Blobs
- de Armazenamento de Filas
<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 Blobs
- de Armazenamento de Filas
@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 Módulo do Azure do Cosmos DB na documentação de Testcontainers. Com @ServiceConnection, essa configuração permite que os feijões 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 bean AzureCosmosConnectionDetails, que é usado pela configuração automática do Cosmos DB, substituindo as propriedades de configuração relacionadas à conexão.
Amostras
Para obter mais informações, consulte o azure-spring-boot-samples repositório no GitHub.