Bagikan melalui


Dukungan Spring Cloud Azure untuk Testcontainers

Artikel ini menjelaskan cara mengintegrasikan Spring Cloud Azure dengan Testcontainers menulis pengujian integrasi yang efektif untuk aplikasi Anda.

Testcontainers adalah kerangka kerja sumber terbuka untuk menyediakan instans database, broker pesan, browser web, atau apa pun yang dapat dijalankan dalam kontainer Docker. Ini terintegrasi dengan JUnit, memungkinkan Anda menulis kelas pengujian yang dapat memulai kontainer sebelum salah satu pengujian dijalankan. Testcontainers sangat berguna untuk menulis pengujian integrasi yang berbicara dengan layanan backend nyata.

Pustaka spring-cloud-azure-testcontainers sekarang mendukung pengujian integrasi untuk layanan Azure berikut:

  • Azure Cosmos DB
  • Azure Blob Storage
  • Azure Queue Storage

Koneksi layanan

Koneksi layanan adalah koneksi ke layanan jarak jauh apa pun. Konfigurasi otomatis Spring Boot dapat menggunakan detail koneksi layanan dan menggunakannya untuk membuat koneksi ke layanan jarak jauh. Saat melakukannya, detail koneksi lebih diutamakan daripada properti konfigurasi terkait koneksi.

Saat menggunakan Testcontainers, Anda dapat membuat detail koneksi secara otomatis untuk layanan yang berjalan dalam kontainer dengan membuat anotasi bidang kontainer di kelas pengujian.

Anotasi @ServiceConnection diproses oleh kelas xxxContainerConnectionDetailsFactory yang terdaftar di spring.factories. Pabrik-pabrik ini membuat kacang ConnectionDetails berdasarkan subkelas Container tertentu atau nama gambar Docker.

Tabel berikut ini menyediakan informasi tentang kelas pabrik detail koneksi yang didukung di spring-cloud-azure-testcontainers JAR:

Kelas pabrik detail koneksi Biji detail koneksi
CosmosContainerConnectionDetailsFactory AzureCosmosConnectionDetails
StorageBlobContainerConnectionDetailsFactory AzureStorageBlobConnectionDetails
StorageQueueContainerConnectionDetailsFactory AzureStorageQueueConnectionDetails

Menyiapkan dependensi

Konfigurasi berikut menyiapkan dependensi yang diperlukan:

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

Menggunakan Testcontainers

Contoh kode berikut menunjukkan penggunaan dasar 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() {
        // ...
    }
}

Untuk menggunakan CosmosDBEmulatorContainer, kita perlu menyiapkan KeyStore untuk TLS/SSL. Untuk informasi selengkapnya, lihat Modul Azure Cosmos DB dalam dokumentasi Testcontainers. Dengan @ServiceConnection, konfigurasi ini memungkinkan kacang terkait Cosmos DB di aplikasi untuk berkomunikasi dengan Cosmos DB yang berjalan di dalam kontainer Docker yang dikelola Testcontainers. Tindakan ini dilakukan dengan secara otomatis menentukan kacang AzureCosmosConnectionDetails, yang kemudian digunakan oleh konfigurasi otomatis Cosmos DB, mengambil alih properti konfigurasi terkait koneksi apa pun.

Sampel

Untuk informasi selengkapnya, lihat repositori azure-spring-boot-samples di GitHub.