Testcontainers 的 Spring Cloud Azure 支援
本文適用於:✅ 5.19.0 版
本文說明如何整合 Spring Cloud Azure 與 Testcontainers,為您的應用程式撰寫有效的整合測試。
Testcontainers 是一種開放原始碼架構,可用來提供資料庫、訊息代理程式、網頁瀏覽器,或可在 Docker 容器中執行的任何專案。 它與 JUnit 整合,可讓您撰寫可在任何測試執行之前啟動容器的測試類別。 Testcontainers 特別適合用來撰寫與實際後端服務通訊的整合測試。
spring-cloud-azure-testcontainers
連結庫現在支援下列 Azure 服務的整合測試:
服務連線
服務連線是任何遠端服務的連線。 Spring Boot 的自動設定可以取用服務連線的詳細數據,並使用它們來建立遠端服務的連線。 這樣做時,連線詳細數據優先於任何連線相關的組態屬性。
當您使用 Testcontainers 時,您可以藉由在測試類別中標註容器欄位,自動為在容器中執行的服務建立連線詳細數據。
@ServiceConnection
批注是由向 spring.factories
註冊的類別 xxxContainerConnectionDetailsFactory
處理。 這些工廠會根據特定 Container
子類別或 Docker 映像名稱,建立 ConnectionDetails
豆。
下表提供 spring-cloud-azure-testcontainers
JAR 中支援的連線詳細數據 Factory 類別相關信息:
線上詳細數據 Factory 類別 | 線上詳細數據 Bean |
---|---|
CosmosContainerConnectionDetailsFactory |
AzureCosmosConnectionDetails |
StorageBlobContainerConnectionDetailsFactory |
AzureStorageBlobConnectionDetails |
StorageQueueContainerConnectionDetailsFactory |
AzureStorageQueueConnectionDetails |
設定相依性
下列組態會設定必要的相依性:
<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
下列程式代碼範例示範 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() {
// ...
}
}
若要使用 CosmosDBEmulatorContainer
,我們必須準備 TLS/SSL 的 KeyStore
。 如需詳細資訊,請參閱 Testcontainers 檔中的 Cosmos DB Azure 模組。 透過 @ServiceConnection
,此設定可讓應用程式中的 Cosmos DB 相關豆類與 Testcontainers 受控 Docker 容器內執行的 Cosmos DB 通訊。 此動作是藉由自動定義 AzureCosmosConnectionDetails
豆來完成,然後由Cosmos DB自動設定使用,覆寫任何連線相關的組態屬性。
樣品
如需詳細資訊,請參閱 GitHub 上的 azure-spring-boot-samples 存放庫