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:
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 @ServiceConnection
ta 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.