Spring Cloud Azure-ondersteuning voor Testcontainers
Dit artikel is van toepassing op:✅ versie 5.19.0
In dit artikel wordt beschreven hoe u Spring Cloud Azure integreert met Testcontainers om effectieve integratietests voor uw toepassingen te schrijven.
Testcontainers is een opensource-framework voor het bieden van wegwerpbare, lichtgewicht exemplaren van databases, berichtbrokers, webbrowsers of bijna alles wat in een Docker-container kan worden uitgevoerd. Het integreert met JUnit, zodat u een testklasse kunt schrijven die een container kan starten voordat een van de tests wordt uitgevoerd. Testcontainers zijn vooral handig voor het schrijven van integratietests die communiceren met een echte back-endservice.
De spring-cloud-azure-testcontainers
-bibliotheek biedt nu ondersteuning voor integratietests voor de volgende Azure-services:
Serviceverbindingen
Een serviceverbinding is een verbinding met elke externe service. De automatische configuratie van Spring Boot kan de details van een serviceverbinding verbruiken en deze gebruiken om een verbinding met een externe service tot stand te brengen. Als u dit doet, hebben de verbindingsgegevens voorrang op eventuele verbindingsgerelateerde configuratie-eigenschappen.
Wanneer u Testcontainers gebruikt, kunt u automatisch verbindingsgegevens maken voor een service die in een container wordt uitgevoerd door aantekeningen te maken aan het containerveld in de testklasse.
De @ServiceConnection
aantekening wordt verwerkt door xxxContainerConnectionDetailsFactory
klassen die zijn geregistreerd bij spring.factories
. Deze factory's maken een ConnectionDetails
bean op basis van een specifieke Container
subklasse of de naam van de Docker-installatiekopieën.
De volgende tabel bevat informatie over de factoryklassen voor verbindingsgegevens die worden ondersteund in de spring-cloud-azure-testcontainers
JAR:
Fabrieksklasse verbindingsdetails | Verbindingsdetails van de bean |
---|---|
CosmosContainerConnectionDetailsFactory |
AzureCosmosConnectionDetails |
StorageBlobContainerConnectionDetailsFactory |
AzureStorageBlobConnectionDetails |
StorageQueueContainerConnectionDetailsFactory |
AzureStorageQueueConnectionDetails |
Afhankelijkheden instellen
Met de volgende configuratie worden de vereiste afhankelijkheden ingesteld:
<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>
Testcontainers gebruiken
In het volgende codevoorbeeld ziet u het basisgebruik van Testcontainers:
@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() {
// ...
}
}
Als u CosmosDBEmulatorContainer
wilt gebruiken, moeten we een KeyStore
voorbereiden voor TLS/SSL. Zie Cosmos DB Azure Module in de documentatie voor Testcontainers voor meer informatie. Met @ServiceConnection
kan met deze configuratie cosmos DB-gerelateerde bonen in de app communiceren met Cosmos DB die wordt uitgevoerd in de door Testcontainers beheerde Docker-container. Deze actie wordt uitgevoerd door automatisch een AzureCosmosConnectionDetails
bean te definiëren, die vervolgens wordt gebruikt door de automatische configuratie van Cosmos DB, waarbij eventuele verbindingsgerelateerde configuratie-eigenschappen worden overschreven.
Monsters
Zie de azure-spring-boot-samples opslagplaats op GitHub voor meer informatie.