CodeBlanks Logo Icon CodeBlanks

Testcontainers

Testcontainers ile entegrasyon testi öğrenirsin.

Testcontainers ile gerçek DB

Testcontainers, test sırasında gerçek Docker konteynerleri başlatır. Bir PostgreSQL, Redis ya da Kafka'yı testte kullanmanı sağlar; H2 gibi in-memory yerine gerçek sürümü test edersin.

Örnek: val container = PostgreSQLContainer("postgres:16"); container.start(). container.jdbcUrl ile gerçek bağlantı adresini alırsın. Test bitince container.stop() ile kapatılır. Bu kalıp, test ile üretim arasındaki farkı azaltır.

withContainer ve otomatik kapatma

Testcontainers, JUnit 5 ile @Testcontainers ve @Container ek açıklamalarıyla otomatik yönetim sağlar. Konteyner, test öncesi başlar, sonrasında kapanır.

Örnek: @Container val postgres = PostgreSQLContainer("postgres:16"). jdbcUrl, username ve password ile gerçek bağlantı bilgilerini alırsın. Bu kalıp, kod tekrarı olmadan konteyner yaşam döngüsünü yönetir.

Uygulama GenericContainer tanımla

RedisContainer adında basit bir sınıf tanımla; GenericContainer<Nothing>("redis:7") miras alsın ve val port = firstMappedPort özelliği eklesin. main içinde RedisContainer() örneği oluşturup println(it.port) yerine println("started") yazdır.

Başlangıç kodu

Main.kt
import org.testcontainers.containers.GenericContainer

// RedisContainer: GenericContainerdan miras alır, redis:7 imajı
// main'de örnek oluştur ve "started" yazdır

Örnek çözüm

Main.kt
import org.testcontainers.containers.GenericContainer

open class RedisContainer :
    GenericContainer<Nothing>("redis:7") {
    val port: Int
        get() = firstMappedPort
}

fun main() {
    RedisContainer().use {
        println("started")
    }
}

Beklenen çıktı

started

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 PostgreSQLContainer tanımını tamamla

Soru
val container = ____("postgres:16")
container.start()
Cevap
val container = PostgreSQLContainer("postgres:16")
container.start()

Açıklama: PostgreSQLContainer gerçek PostgreSQL başlatır.

2 Testcontainers'ın temel avantajı nedir?

  • Üretimle aynı ortamda test Doğru cevap
  • Docker gerektirmemesi
  • Düşük bellek kullanımı
  • Daha yavaş testler

Açıklama: Testcontainers gerçek sürümlerle test sağlar; üretimle uyumu artırır.

3 Testcontainers parçalarını eşle

Kavram Anlamı
PostgreSQLContainer Postgres imajı
container.start() Başlatma
container.jdbcUrl Bağlantı adresi
container.stop() Kapatma

İleri seviye bölümündeki tüm dersler