Поделиться через


Поддержка 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.