Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 @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.