Supporto di Spring Cloud Azure per Testcontainers
Questo articolo si applica a:✅ versione 5.19.0
Questo articolo descrive come integrare Spring Cloud Azure con Testcontainers per scrivere test di integrazione efficaci per le applicazioni.
Testcontainers è un framework open source per fornire istanze throwaway, lightweight di database, broker di messaggi, Web browser o qualsiasi cosa possa essere eseguita in un contenitore Docker. Si integra con JUnit, consentendo di scrivere una classe di test in grado di avviare un contenitore prima dell'esecuzione di uno dei test. Testcontainers è particolarmente utile per la scrittura di test di integrazione che comunicano con un servizio back-end reale.
La libreria spring-cloud-azure-testcontainers
supporta ora i test di integrazione per i servizi di Azure seguenti:
- di Azure Cosmos DB
- di Archiviazione BLOB di Azure
- archiviazione code di Azure
Connessioni al servizio
Una connessione al servizio è una connessione a qualsiasi servizio remoto. La configurazione automatica di Spring Boot può utilizzare i dettagli di una connessione al servizio e usarli per stabilire una connessione a un servizio remoto. In questo caso, i dettagli della connessione hanno la precedenza su qualsiasi proprietà di configurazione correlata alla connessione.
Quando si usano Testcontainers, è possibile creare automaticamente i dettagli di connessione per un servizio in esecuzione in un contenitore annotando il campo contenitore nella classe di test.
L'annotazione @ServiceConnection
viene elaborata dalle classi xxxContainerConnectionDetailsFactory
registrate con spring.factories
. Queste factory creano un ConnectionDetails
bean in base a una sottoclasse Container
specifica o al nome dell'immagine Docker.
Nella tabella seguente vengono fornite informazioni sulle classi factory dei dettagli della connessione supportate nel file JAR spring-cloud-azure-testcontainers
:
Classe factory dei dettagli della connessione | Bean dei dettagli della connessione |
---|---|
CosmosContainerConnectionDetailsFactory |
AzureCosmosConnectionDetails |
StorageBlobContainerConnectionDetailsFactory |
AzureStorageBlobConnectionDetails |
StorageQueueContainerConnectionDetailsFactory |
AzureStorageQueueConnectionDetails |
Configurare le dipendenze
La configurazione seguente configura le dipendenze necessarie:
- Cosmos
- di archiviazione BLOB
-
di archiviazione code di
<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>
Usare Testcontainers
L'esempio di codice seguente illustra l'utilizzo di base di Testcontainers:
- Cosmos
- di archiviazione BLOB
-
di archiviazione code di
@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() {
// ...
}
}
Per usare CosmosDBEmulatorContainer
, è necessario preparare un KeyStore
per TLS/SSL. Per altre informazioni, vedere modulo di Azure di Cosmos DB nella documentazione di Testcontainers. Con @ServiceConnection
, questa configurazione consente ai fagioli correlati a Cosmos DB nell'app di comunicare con Cosmos DB in esecuzione all'interno del contenitore Docker gestito da Testcontainers. Questa azione viene eseguita definendo automaticamente un AzureCosmosConnectionDetails
bean, che viene quindi usato dalla configurazione automatica di Cosmos DB, eseguendo l'override di tutte le proprietà di configurazione correlate alla connessione.
Campioni
Per altre informazioni, vedere il repository azure-spring-boot-samples