Prise en charge d’Azure Spring Cloud pour Testcontainers
Cet article s’applique à :✅ version 5.19.0
Cet article explique comment intégrer Spring Cloud Azure à Testcontainers pour écrire des tests d’intégration efficaces pour vos applications.
Testcontainers est une infrastructure open source permettant de fournir des instances légères de bases de données, de répartiteurs de messages, de navigateurs web ou tout ce qui peut s’exécuter dans un conteneur Docker. Il s’intègre à JUnit, ce qui vous permet d’écrire une classe de test qui peut démarrer un conteneur avant l’exécution de l’un des tests. Testcontainers est particulièrement utile pour écrire des tests d’intégration qui parlent à un service principal réel.
La bibliothèque spring-cloud-azure-testcontainers
prend désormais en charge les tests d’intégration pour les services Azure suivants :
- Azure Cosmos DB
- Stockage Blob Azure
- stockage file d’attente Azure
Connexions de service
Une connexion de service est une connexion à n’importe quel service distant. La configuration automatique de Spring Boot peut consommer les détails d’une connexion de service et les utiliser pour établir une connexion à un service distant. Dans ce cas, les détails de la connexion sont prioritaires sur toutes les propriétés de configuration liées à la connexion.
Lorsque vous utilisez Testcontainers, vous pouvez créer automatiquement des détails de connexion pour un service s’exécutant dans un conteneur en annotant le champ conteneur dans la classe de test.
L’annotation @ServiceConnection
est traitée par xxxContainerConnectionDetailsFactory
classes inscrites auprès de spring.factories
. Ces fabriques créent un haricot ConnectionDetails
en fonction d’une sous-classe Container
spécifique ou du nom de l’image Docker.
Le tableau suivant fournit des informations sur les classes de fabrique des détails de connexion prises en charge dans le fichier JAR spring-cloud-azure-testcontainers
:
Classe fabrique des détails de connexion | Détails de connexion bean |
---|---|
CosmosContainerConnectionDetailsFactory |
AzureCosmosConnectionDetails |
StorageBlobContainerConnectionDetailsFactory |
AzureStorageBlobConnectionDetails |
StorageQueueContainerConnectionDetailsFactory |
AzureStorageQueueConnectionDetails |
Configurer des dépendances
La configuration suivante configure les dépendances requises :
- Cosmos
- Stockage Blob
- stockage file d’attente
<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>
Utiliser testcontainers
L’exemple de code suivant illustre l’utilisation de base des Testcontainers :
- Cosmos
- Stockage Blob
- stockage file d’attente
@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() {
// ...
}
}
Pour utiliser CosmosDBEmulatorContainer
, nous devons préparer un KeyStore
pour TLS/SSL. Pour plus d’informations, consultez module Azure Cosmos DB dans la documentation testcontainers. Avec @ServiceConnection
, cette configuration permet aux haricots liés à Cosmos DB dans l’application de communiquer avec Cosmos DB s’exécutant à l’intérieur du conteneur Docker géré par Testcontainers. Cette action est effectuée en définissant automatiquement une AzureCosmosConnectionDetails
bean, qui est ensuite utilisée par la configuration automatique Cosmos DB, en remplaçant toutes les propriétés de configuration liées à la connexion.
Échantillons
Pour plus d’informations, consultez le dépôt azure-spring-boot-samples sur GitHub.