Поддержка Azure Spring Cloud для Testcontainers
эта статья относится к:✅ версии 5.19.0
В этой статье описывается, как интегрировать Spring Cloud Azure с Testcontainers для создания эффективных тестов интеграции для приложений.
Testcontainers — это платформа с открытым исходным кодом для предоставления простого экземпляра баз данных, брокеров сообщений, веб-браузеров или всего, что может работать в контейнере Docker. Он интегрируется с JUnit, что позволяет создавать тестовый класс, который может запускать контейнер перед выполнением тестов. Testcontainers особенно полезна для написания тестов интеграции, которые говорят с реальной серверной службой.
Библиотека spring-cloud-azure-testcontainers
теперь поддерживает тестирование интеграции для следующих служб Azure:
Подключения к службе
Подключение службы — это подключение к любой удаленной службе. Автонастройка Spring Boot может использовать сведения о подключении к службе и использовать их для установки подключения к удаленной службе. При этом сведения о подключении имеют приоритет над любыми свойствами конфигурации, связанными с подключением.
При использовании Testcontainers можно автоматически создавать сведения о подключении для службы, работающей в контейнере, заметив поле контейнера в тестовом классе.
Заметка @ServiceConnection
обрабатывается классами xxxContainerConnectionDetailsFactory
, зарегистрированными в spring.factories
. Эти фабрики создают ConnectionDetails
боб на основе определенного подкласса Container
или имени образа Docker.
В следующей таблице приведены сведения о классах фабрики сведений о подключении, поддерживаемых в jar-файле spring-cloud-azure-testcontainers
:
Класс фабрики сведений о подключении | Сведения о подключении |
---|---|
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
, необходимо подготовить KeyStore
для TLS/SSL. Дополнительные сведения см. в модуля Azure Cosmos DB в документации testcontainers. С помощью @ServiceConnection
эта конфигурация позволяет бобам, связанным с Cosmos DB, взаимодействовать с Cosmos DB, работающей в контейнере Docker, управляемом Testcontainers. Это действие выполняется автоматически путем определения AzureCosmosConnectionDetails
боба, который затем используется автонастройкой Cosmos DB, переопределяя все свойства конфигурации, связанные с подключением.
Образцы
Дополнительные сведения см. в репозитории azure-spring-boot-samples на сайте GitHub.