Podpora Spring Cloud Azure pro testcontainery
Tento článek se vztahuje na:✅ verze 5.20.1
Tento článek popisuje, jak integrovat Spring Cloud Azure s testcontainery k zápisu efektivních integračních testů pro vaše aplikace.
Testcontainers je opensourcová architektura pro poskytování odkládacích, jednoduchých instancí databází, zprostředkovatelů zpráv, webových prohlížečů nebo čehokoli, co může běžet v kontejneru Dockeru. Integruje se s JUnit a umožňuje psát testovací třídu, která může spustit kontejner před spuštěním jakéhokoli testu. Testcontainery jsou zvláště užitečné pro psaní integračních testů, které komunikují se skutečnou back-endovou službou.
Knihovna spring-cloud-azure-testcontainers
teď podporuje testování integrace pro následující služby Azure:
Připojení služeb
Připojení služby je připojení k jakékoli vzdálené službě. Automatická konfigurace Spring Bootu může využívat podrobnosti o připojení služby a používat je k navázání připojení ke vzdálené službě. Při tom mají podrobnosti o připojení přednost před všemi vlastnostmi konfigurace souvisejícími s připojením.
Při použití testcontainers můžete automaticky vytvořit podrobnosti připojení pro službu spuštěnou v kontejneru tak, že do pole kontejneru v testovací třídě označíte pole kontejneru.
@ServiceConnection
poznámku zpracovává třídy xxxContainerConnectionDetailsFactory
zaregistrované v spring.factories
. Tyto továrny vytvoří ConnectionDetails
bean na základě konkrétní podtřídy Container
nebo názvu image Dockeru.
Následující tabulka obsahuje informace o třídách objektu pro vytváření podrobností připojení podporovaných v spring-cloud-azure-testcontainers
JAR:
Třída objektu pro vytváření podrobností připojení | Podrobnosti připojení bean |
---|---|
CosmosContainerConnectionDetailsFactory |
AzureCosmosConnectionDetails |
StorageBlobContainerConnectionDetailsFactory |
AzureStorageBlobConnectionDetails |
StorageQueueContainerConnectionDetailsFactory |
AzureStorageQueueConnectionDetails |
Nastavení závislostí
Následující konfigurace nastaví požadované závislosti:
<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>
Použití testcontainerů
Následující příklad kódu ukazuje základní použití 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() {
// ...
}
}
Abychom mohli používat CosmosDBEmulatorContainer
, musíme připravit KeyStore
na TLS/SSL. Další informace najdete v modulu Azure Cosmos DB v dokumentaci k testcontainerům. Díky @ServiceConnection
tato konfigurace umožňuje službě Cosmos DB v aplikaci komunikovat se službou Cosmos DB spuštěnou uvnitř kontejneru Docker spravovaného službou Testcontainers. Tato akce se provádí tak, že automaticky definujete AzureCosmosConnectionDetails
bean, který pak používá automatická konfigurace služby Cosmos DB a přepisuje všechny vlastnosti konfigurace související s připojením.
Vzorky
Další informace najdete v azure-spring-boot-samples úložišti na GitHubu.