Compatibilidad de Spring Cloud con Azure para Testcontainers
Este artículo se aplica a:✅ versión 5.19.0
En este artículo se describe cómo integrar Spring Cloud Azure con Testcontainers para escribir pruebas de integración eficaces para las aplicaciones.
testcontainers es un marco de código abierto para proporcionar instancias ligeras de bases de datos, agentes de mensajes, exploradores web o casi cualquier cosa que se pueda ejecutar en un contenedor de Docker. Se integra con JUnit, lo que le permite escribir una clase de prueba que pueda iniciar un contenedor antes de que se ejecute cualquiera de las pruebas. Testcontainers es especialmente útil para escribir pruebas de integración que hablan con un servicio back-end real.
La biblioteca de spring-cloud-azure-testcontainers
ahora admite pruebas de integración para los siguientes servicios de Azure:
Conexiones de servicio
Una conexión de servicio es una conexión a cualquier servicio remoto. La configuración automática de Spring Boot puede consumir los detalles de una conexión de servicio y usarlas para establecer una conexión a un servicio remoto. Al hacerlo, los detalles de conexión tienen prioridad sobre las propiedades de configuración relacionadas con la conexión.
Al usar Testcontainers, puede crear automáticamente detalles de conexión para un servicio que se ejecuta en un contenedor anotando el campo contenedor en la clase de prueba.
La anotación @ServiceConnection
se procesa mediante xxxContainerConnectionDetailsFactory
clases registradas con spring.factories
. Estas factorías crean un bean de ConnectionDetails
en función de una subclase Container
específica o el nombre de la imagen de Docker.
En la tabla siguiente se proporciona información sobre las clases de generador de detalles de conexión admitidas en el archivo JAR de spring-cloud-azure-testcontainers
:
Clase de generador de detalles de conexión | Bean de detalles de conexión |
---|---|
CosmosContainerConnectionDetailsFactory |
AzureCosmosConnectionDetails |
StorageBlobContainerConnectionDetailsFactory |
AzureStorageBlobConnectionDetails |
StorageQueueContainerConnectionDetailsFactory |
AzureStorageQueueConnectionDetails |
Configuración de dependencias
La siguiente configuración configura las dependencias necesarias:
- de Cosmos
- blob Storage
- Queue Storage
<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>
Uso de Testcontainers
En el ejemplo de código siguiente se muestra el uso básico de Testcontainers:
- de Cosmos
- blob Storage
- Queue Storage
@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
, es necesario preparar un KeyStore
para TLS/SSL. Para más información, consulte módulo de Azure de Cosmos DB en la documentación de Testcontainers. Con @ServiceConnection
, esta configuración permite que los frijoles relacionados con Cosmos DB de la aplicación se comuniquen con Cosmos DB que se ejecutan dentro del contenedor de Docker administrado por Testcontainers. Esta acción se realiza mediante la definición automática de un AzureCosmosConnectionDetails
bean, que después se usa en la configuración automática de Cosmos DB, reemplazando las propiedades de configuración relacionadas con la conexión.
Muestras
Para más información, consulte el repositorio de azure-spring-boot-samples en GitHub.