H2 Database ব্যবহার করে In-Memory Testing

Java Technologies - স্প্রিং বুট জেপিএ (Spring Boot JPA) - Testing Spring Boot JPA Applications
249

Spring Boot JPA এবং In-Memory Testing

Spring Boot JPA তে in-memory database testing এর মাধ্যমে আমরা সহজেই unit tests বা integration tests তৈরি করতে পারি। H2 Database একটি জনপ্রিয় ইন-মেমরি ডেটাবেস যা testing উদ্দেশ্যে ব্যবহার করা হয়। H2 ডেটাবেস সম্পূর্ণরূপে in-memory থাকে, অর্থাৎ ডেটাবেসের সমস্ত ডেটা শুধুমাত্র রানটাইমে থাকে এবং অ্যাপ্লিকেশন বন্ধ হলে ডেটা হারিয়ে যায়।

Spring Boot এবং JPA এর সাথে H2 database ব্যবহার করে in-memory testing করা অত্যন্ত সহজ এবং কার্যকর। এখানে, আমরা দেখব কিভাবে Spring Boot JPA প্রজেক্টে H2 Database ব্যবহার করে ইন-মেমরি টেস্টিং করা যায়।


1. Spring Boot প্রজেক্ট সেটআপ

1.1. Dependency Setup

প্রথমে H2 Database এবং Spring Boot Test এর জন্য ডিপেনডেন্সি আপনার pom.xml ফাইলে যোগ করতে হবে।

<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Boot Starter Data JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!-- H2 Database for In-Memory Testing -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!-- Spring Boot Starter Test for Unit Testing -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

1.2. application.properties কনফিগারেশন

H2 Database এবং JPA configuration সেটআপ করার জন্য application.properties ফাইলে কিছু কনফিগারেশন লিখতে হবে।

# H2 Database Configuration
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
spring.h2.console.enabled=true

এখানে, H2 ডেটাবেসের ইন-মেমরি মোডে ব্যবহার করার জন্য কনফিগারেশন করা হয়েছে। DB_CLOSE_DELAY=-1 সেট করার মাধ্যমে ডেটাবেস বন্ধ হওয়ার পরেও ডেটা রাখা হয়।


2. JPA Entity তৈরি করা

2.1. User Entity তৈরি করা

এখানে একটি User Entity তৈরি করা হয়েছে, যা H2 ডেটাবেসের সাথে ইন্টিগ্রেট করা হবে।

package com.example.model;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class User {

    @Id
    private Long id;
    private String name;
    private String email;

    // Getters and Setters
}

2.2. UserRepository Interface তৈরি করা

Spring Data JPA তে JpaRepository ইন্টারফেস ব্যবহার করে আমরা CRUD অপারেশন গুলি পরিচালনা করবো।

package com.example.repository;

import com.example.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
    // Custom queries can go here if needed
}

3. Unit Test বা Integration Test তৈরি করা

Spring Boot এবং JPA এর জন্য in-memory testing করার জন্য আমরা Spring Boot Test ব্যবহার করবো। @DataJpaTest অ্যানোটেশন ব্যবহার করে, JPA সম্পর্কিত সমস্ত কনফিগারেশন এবং ডেটাবেস সংক্রান্ত কাজ শুধুমাত্র টেস্ট কেসের জন্য চালানো যাবে।

3.1. Test Class তৈরি করা

UserRepository এর জন্য একটি টেস্ট ক্লাস তৈরি করা হচ্ছে, যেখানে H2 Database তে ইন-মেমরি ডেটাবেস ব্যবহার করা হবে।

package com.example;

import com.example.model.User;
import com.example.repository.UserRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;

import static org.junit.jupiter.api.Assertions.*;

@DataJpaTest
public class UserRepositoryTest {

    @Autowired
    private UserRepository userRepository;

    @Test
    public void testSaveUser() {
        User user = new User();
        user.setId(1L);
        user.setName("John Doe");
        user.setEmail("john.doe@example.com");

        User savedUser = userRepository.save(user);
        
        assertNotNull(savedUser);
        assertEquals(user.getName(), savedUser.getName());
    }

    @Test
    public void testFindUserByEmail() {
        User user = new User();
        user.setId(2L);
        user.setName("Jane Doe");
        user.setEmail("jane.doe@example.com");

        userRepository.save(user);
        
        User foundUser = userRepository.findById(2L).orElse(null);
        
        assertNotNull(foundUser);
        assertEquals("jane.doe@example.com", foundUser.getEmail());
    }
}

3.2. Test Execution

  • @DataJpaTest: এই অ্যানোটেশনটি শুধুমাত্র JPA সম্পর্কিত টেস্টিংয়ের জন্য ব্যবহৃত হয়। এটি in-memory database কে টেস্ট চলাকালীন স্বয়ংক্রিয়ভাবে প্রস্তুত করে এবং টেস্ট শেষ হওয়ার পর তা মুছে ফেলে।
  • Test Methods:
    • testSaveUser: এখানে, User অবজেক্ট ডাটাবেসে সেভ করা হচ্ছে এবং এটি সঠিকভাবে সেভ হয়েছে কিনা চেক করা হচ্ছে।
    • testFindUserByEmail: এখানে, ডেটাবেসে সেভ করা ইউজারটি আবার খোঁজা হচ্ছে এবং নিশ্চিত করা হচ্ছে যে এটি সঠিকভাবে সেভ হয়েছে।

3.3. Test Run

এই টেস্ট ক্লাসটি চালানোর পরে, আপনার UserRepository এর ডেটাবেস অপারেশন পরীক্ষা করা যাবে এবং H2 ইন-মেমরি ডেটাবেস ব্যবহার করা হবে। JUnit এর মাধ্যমে টেস্ট সফলভাবে সম্পন্ন হলে, এটি নিশ্চিত করবে যে আপনার JPA সম্পর্কিত কাজ সঠিকভাবে কাজ করছে।


4. Test Logs

টেস্ট চলাকালীন, আপনি H2 console এর মাধ্যমে আপনার ইন-মেমরি ডেটাবেসটি দেখতে পারেন।

  • H2 Console Access: http://localhost:8080/h2-console/
  • Console Configuration:
    • JDBC URL: jdbc:h2:mem:testdb
    • Username: sa
    • Password: password

এখানে আপনি H2 কনসোল ব্যবহার করে ইন-মেমরি ডেটাবেসের ডেটা দেখতে পারেন।


সারাংশ

Spring Boot JPA তে H2 Database ব্যবহার করে in-memory testing খুবই সহজ এবং কার্যকরী। @DataJpaTest অ্যানোটেশন ব্যবহার করে, আপনি JPA সম্পর্কিত unit tests বা integration tests তৈরি করতে পারেন যেখানে H2 Database ইন-মেমরি মোডে কাজ করে। এতে ডেটাবেস অপারেশনগুলি দ্রুত পরীক্ষা করা যায় এবং প্রোডাকশনের ডেটাবেসের উপর কোনো প্রভাব না পড়ে। H2 Database এবং Spring Boot JPA এর সমন্বয়ে এই ধরনের টেস্টিং আপনার অ্যাপ্লিকেশনের ডেটাবেস সম্পর্কিত লজিক যাচাই করতে সহায়ক হবে।


Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...