Udostępnij za pośrednictwem


Obsługa platformy Azure platformy Spring Cloud dla aplikacji Testcontainers

Ten artykuł dotyczy:✅ w wersji 5.19.0

W tym artykule opisano sposób integrowania platformy Spring Cloud azure z usługą Testcontainers w celu pisania skutecznych testów integracji dla aplikacji.

Testcontainers to platforma typu open source służąca do udostępniania wyrzuconych, lekkich wystąpień baz danych, brokerów komunikatów, przeglądarek internetowych lub niemal wszystkich elementów, które mogą być uruchamiane w kontenerze platformy Docker. Integruje się z programem JUnit, umożliwiając pisanie klasy testowej, która może uruchomić kontener przed uruchomieniem któregokolwiek z testów. Narzędzia Testcontainers są szczególnie przydatne do pisania testów integracji, które komunikują się z prawdziwą usługą zaplecza.

Biblioteka spring-cloud-azure-testcontainers obsługuje teraz testowanie integracji dla następujących usług platformy Azure:

  • usługi Azure Cosmos DB
  • usługi Azure Blob Storage
  • usługi Azure Queue Storage

Połączenia usług

Połączenie usługi to połączenie z dowolną usługą zdalną. Automatyczna konfiguracja platformy Spring Boot może używać szczegółów połączenia z usługą i używać ich do nawiązywania połączenia z usługą zdalną. W tym przypadku szczegóły połączenia mają pierwszeństwo przed wszelkimi właściwościami konfiguracji powiązanymi z połączeniem.

Gdy używasz narzędzia Testcontainers, możesz automatycznie utworzyć szczegóły połączenia dla usługi uruchomionej w kontenerze, dodając adnotacje do pola kontenera w klasie testowej.

Adnotacja @ServiceConnection jest przetwarzana przez klasy xxxContainerConnectionDetailsFactory zarejestrowane za pomocą spring.factories. Te fabryki tworzą fasolę ConnectionDetails na podstawie określonej podklasy Container lub nazwy obrazu platformy Docker.

Poniższa tabela zawiera informacje o klasach fabryk szczegółów połączenia obsługiwanych w spring-cloud-azure-testcontainers JAR:

Klasa fabryki szczegółów połączenia Fasola szczegółów połączenia
CosmosContainerConnectionDetailsFactory AzureCosmosConnectionDetails
StorageBlobContainerConnectionDetailsFactory AzureStorageBlobConnectionDetails
StorageQueueContainerConnectionDetailsFactory AzureStorageQueueConnectionDetails

Konfigurowanie zależności

Następująca konfiguracja konfiguruje wymagane zależności:

<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>

Korzystanie z usługi Testcontainers

W poniższym przykładzie kodu pokazano podstawowe użycie elementów 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() {
        // ...
    }
}

Aby użyć CosmosDBEmulatorContainer, musimy przygotować KeyStore dla protokołu TLS/SSL. Aby uzyskać więcej informacji, zobacz Moduł platformy Azure usługi Cosmos DB w dokumentacji narzędzia Testcontainers. W przypadku @ServiceConnectionta konfiguracja umożliwia aplikacji komunikację z usługą Cosmos DB z usługą Cosmos DB działającą wewnątrz kontenera platformy Docker zarządzanego przez usługę Testcontainers. Ta akcja jest wykonywana przez automatyczne definiowanie AzureCosmosConnectionDetails fasoli, która jest następnie używana przez automatyczną konfigurację usługi Cosmos DB, przesłaniając wszystkie właściwości konfiguracji związane z połączeniem.

Próbki

Aby uzyskać więcej informacji, zobacz repozytorium azure-spring-boot-samples w witrynie GitHub.