Testcontainers, TestRestTemplate ve JUnit5 ile Integration Test

0 983

Önceki yazılarımızda unit testler üzerinde durmuştuk bugün ise integration test yazmaya çalışacağız. Bunun için Testcontainers‘dan yararlanıyor olacağız.

Testcontainers’ın sağladığı bazı özellikler arasında:

  1. Docker Entegrasyonu: Testcontainers, Docker üzerinde çalışan konteynerleri yönetmek için kullanılır. Bu sayede, testlerinizi farklı Docker konteynerlerinde çalıştırabilirsiniz.
  2. Kolay Kullanım: Testcontainers, testlerinizi Java veya diğer dillerde yazarken kolayca entegre edebileceğiniz bir API sağlar.
  3. Çeşitli Konteyner Seçenekleri: Testcontainers, birçok farklı konteyner türünü destekler. Örneğin, PostgreSQL, MySQL, Redis gibi popüler veritabanlarının yanı sıra Elasticsearch, Kafka gibi araçları da destekler.
  4. Performans: Testcontainers, her test çalıştırıldığında konteynerlerin temizlenmesini ve yeniden başlatılmasını sağlar, böylece testlerinizin izole edilmesini ve tekrarlanabilir olmasını sağlar.

Testcontainers bizlere uygulama geliştirme esnasında kullandığımız araçları sunuyor. Aşağıda bazılarını ekledim, kendi sitesi üzerinden detaylı bilgiye ulaşabilirsiniz.

  • Elasticsearch
  • Kafka
  • MySQL
  • Neo4J
  • RabbitMq
  • Redis

Bir örnek üzerinden inceleyelim.

Gereksinimler;

  • Docker
  • Spring Boot:3.2.2
  • Java11+

 

pom.xml

 

Aşağıdaki controller için entegrasyon testi yazmaya çalışacağız.

Controller

Service

Integration Test

 

Uygulamam PostgreSQL ile çalıştığı için PostgreSQLContainer çalıştırıyor olacağım. Başka bir uygulamaya ihtiyacım yok.

TestContainers ile yukarıdaki örnekte olduğu gibi isterseniz PostgreSQLContainer oluşturabilirsiniz.

 

Spring bizim için ApplicationContext’i ayağa kaldıracak ve uygulamaya istek attığımızda bütün Bean’lerimiz hazır olacak. Biz de TestRestTemplate ile istek atıp senaryomuzun başarılı sonuçlanıp/sonuçlanmadığını test edebilir halde olacağız.

NOT: Testleri çalıştırmadan önce Docker Desktop’ın çalıştığından emin olun.

Kaynak;

 

Faydalı olması dileğiyle.

Email adresiniz yayınlanmayacaktır.