Twitter Youtube Github
Burak Kutbay'ın Kişisel Blog'u |

Type and hit Enter to search

  • Etkinliklerim
  • Quarkus
  • Spring Cloud
  • Spring Boot
  • Spring JDBC Template
  • Spring MVC
  • RabbitMQ
  • Hibernate
  • JSP
  • Java 21
  • Java 8
  • Java Server Faces
  • PrimeFaces
  • Servlet
  • JDBC
  • JSTL
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale
Spring BootSpring Boot 3.0

TestContainers ile Spring Boot & MongoDB Test İşlemleri

Paylaş

Spring Boot Dersleri‘ne devam ediyorum. Spring Boot Projelerini Testcontainers araciligi ile test nasil yapilir bir Spring Boot, Postgres ornegi yaparak aciklayacagim.

İçindekiler

Toggle
  • TestContainer Nedir?
  • Spring Boot Mongo DB Ornegi
    • TestContainer Kutuphanesi
  • Uygulama
  • Test & TestContainers
  • Uygulamayı İndir

TestContainer Nedir?

TestContainers uygulamalarimizi test edebilmemiz icin gerekli ortami docker araciligi ile olusturup, testlerimizi izole sekilde yapmamizi saglamaktadir. Testlerin ihtiyaç duyduğu altyapıyı bize saglar ve bunu Docker kullanarak gerceklestirir.

Spring Boot Mongo DB Ornegi

Basit bir Student spring boot projesi yapacagiz. Bir rest api olacak ve Crud islemleri yapilacak. Kullanacagimiz bagimliliklar su sekilde.

 implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
 implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
 implementation 'org.springframework.boot:spring-boot-starter-web'
 testImplementation 'org.springframework.boot:spring-boot-starter-test'
Code language: YAML (yaml)

TestContainer Kutuphanesi

Test islemleri icin ayrica spring boot icin testcontainer kutuphanesini ve veritabani olarak kullanacagimiz ve test ortaminda da kullanacagimiz testcontainer mongodb bagimliligini ekleyelim.

testImplementation 'org.springframework.boot:spring-boot-testcontainers'
testImplementation 'org.testcontainers:junit-jupiter'
testImplementation 'org.testcontainers:mongodb'
Code language: YAML (yaml)

Uygulama

Entity, Repository, Servis ve Controller katmanlarımızı yazalım.

@Document
public class Student {
  @Id
  String id;
  String name;
  Integer age;
}
Code language: Java (java)
@Repository
public interface StudentRepository extends MongoRepository<Student, Long> {
}
Code language: Java (java)
@Repository
public interface StudentRepository extends MongoRepository<Student, Long> {
}
Code language: Java (java)
@Service
public class StudentService {

  private final StudentRepository repository;

  public StudentService(StudentRepository repository) {
    this.repository = repository;
  }

  public Student saveStudent(Student student) {
    return this.repository.save(student);
  }
}
Code language: Java (java)
@RestController
public class StudentController {

  private final StudentService service;

  @PostMapping
  public Student createTodo(@RequestBody Student student) {
    return this.service.saveStudent(student);
  }
}
Code language: Java (java)

Test & TestContainers

Uygulamamızın testini yazarken TestContainers’den faydalanacağız. Bu nedenle MongoDb’yi Docker sayesinde test süreci boyunca ayağa kalkacak ve test işlemlerini gerçekleştirecek.

Şimdi konfigürasyonumuzu hazırlayalım.

@Configuration
@EnableMongoRepositories
public class MongoDBTestContainerConfig {
  
  @Container
  @ServiceConnection
  public static MongoDBContainer mongoDBContainer = new MongoDBContainer("mongo:latest");

  static {
    mongoDBContainer.start();
    var mappedPort = mongoDBContainer.getMappedPort(27017);
    System.setProperty("mongodb.container.port", String.valueOf(mappedPort));
  }
}
Code language: Java (java)

Bir container ayağa kaldımak için mongonun hangi sürümü olacağını belirterek @Container anotasyonu ile tanımlamamızı yaptıktan sonra getMappedPort ile çalışacağı portu belirliyoruz.

Test kalsörümüzdeki application.properties dosyasına propertylerimizi yazalım.

spring.data.mongodb.database=testdb
spring.data.mongodb.port=${mongodb.container.port}
spring.data.mongodb.host=localhost

Bu işlemin ardından testimizi yazmaya hazırız. Test sınıfımızı oluşturalım.

@DataMongoTest
@Testcontainers
@ContextConfiguration(classes = MongoDBTestContainerConfig.class)
public class StudentRepositoryIntegrationTest {
 
  @Autowired
  private StudentRepository studentRepository;

  @Test
  public void testStudentSave() {
    Student student = new Student();
    student.setName("Burak");
    student.setAge(20);
    Student savedStudent = studentRepository.save(student);
    Assertions.assertNotNull(savedStudent.getId());
    Assertions.assertEquals(student.getName(), savedStudent.getName());
    Assertions.assertEquals(student.getAge(), savedStudent.getAge());
  }
}
Code language: Java (java)

Burada gerekli anotasyonlarımızı sınfımıza koyduktan sonra bildiğimiz klasik testimizi rahatça yapabiliriz.

Testi çalıştırdığımızda öncesinde mongo docker ayağa kalkıyor ve sonrasında uygulamadaki testlerimiz koşmaya başlıyor.

Spring Boot Testcontainers Nedir
Spring Boot Testcontainers Nedir

Uygulamayı İndir

Github Adresimden Projeyi İndirebilirsiniz

Projeye Git


Önceki Ders: Spring Boot @ConditionalOnExpression Nedir?
Spring Boot Dersleri
Sonraki Ders:

Tags:

spring boot derslerispring boot testcontainer örneğitestcontainers nedir

Paylaş

Diğer Yazılar

Java 21 Virtual Threads Özelliği Nedir? Uygulama Kod Örneği
Previous

Java 21 – Virtual Threads Nedir? Virtual Threads Uygulama Örneği

Git LFS Nedir?
Next

Git LFS ile Büyük Boyutlu Dosyaları Yükleme Nasıl Yapılır?

Next
Git LFS Nedir?
17 Mayıs 2024

Git LFS ile Büyük Boyutlu Dosyaları Yükleme Nasıl Yapılır?

Previews
07 Ocak 2024

Java 21 – Virtual Threads Nedir? Virtual Threads Uygulama Örneği

Java 21 Virtual Threads Özelliği Nedir? Uygulama Kod Örneği

No Comment! Be the first one.

Bir yanıt yazın Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İlgini Çekebilir

Chaos Monkey Spring Boot Uygulama Ornegi

Chaos Monkey Nedir? #1 Uygulamanızın Sınırlarını Test Edin

Spring Boot Dersleri @ConditionalOnExpression Uygulama Ornegi

Spring Boot @ConditionalOnExpression Nedir? Uygulama Örneği

Spring Boot Dersleri Content Negotiation Uygulama Örneği

Spring Boot Content Negotiation XML – JSON Uygulama Örneği

Spring Boot Interceptor Nedir Kullanım Uygulama Örneği

Spring Boot Interceptor Nedir? Uygulama Örneği

Burak Kutbay'ın Kişisel Blog'u |

© 2008 - ∞, Her hakkı saklıdır.

Link

  • Hakkımda
  • İletişim
  • Arşiv

Kategori

Cloud
Node.js
Java 24
Android
Struts
Röportaj
Gradle
Amazon Web Services
Vue.js
Video
Redis
Spring Boot 3.0
Debezium
Mikroservis Mimarisi
Spring Native
Spring Cloud Stream
Etkinlikler
XCode
JPA
Objective C
iPhone Uygulama Geliştirme
PostgreSQL
Spring Security
MongoDB
Java 21
Spring Data
Apache Kafka
Yaptığım Projeler
Servlet
Git
Maven
Design Patterns
DevOps
Linux
Spring Jdbc Template
RabbitMQ
JDBC
PrimeFaces
Manset
Google
Spring
Spring MVC
Spring Cloud
OCA Java SE 8
Quarkus
Spring Core
Microsoft
Veritabanı
Java SE
Tanıyalım
Hibernate
Teknoloji
Okuduğum Kitaplar
Java Server Faces
Yazılım Mühendisliği
C Sharp
Spring Boot
Java
Günlüğüm
Java Server Page
Makale

Takip Et

Twitter Youtube Github
  • Etkinliklerim
  • Quarkus
  • Spring Cloud
  • Spring Boot
  • Spring JDBC Template
  • Spring MVC
  • RabbitMQ
  • Hibernate
  • JSP
  • Java 21
  • Java 8
  • Java Server Faces
  • PrimeFaces
  • Servlet
  • JDBC
  • JSTL
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale