Testcontainers
- Kotlin kursu
- İleri seviye
- Ders 46/83
- 5 dk
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
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
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
val container = ____("postgres:16")
container.start()
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 |