Spring Test Framework এবং @JdbcTest এর ব্যবহার

Spring JDBC এবং Testing - স্প্রিং জেডিবিসি (Spring JDBC) - Java Technologies

292

Spring Test Framework হলো স্প্রিং অ্যাপ্লিকেশনগুলোর টেস্টিং এর জন্য একটি শক্তিশালী এবং ফিচার-সমৃদ্ধ ফ্রেমওয়ার্ক। এটি বিভিন্ন কনটেক্সট এবং কম্পোনেন্টের কার্যকারিতা নিশ্চিত করতে সাহায্য করে। @JdbcTest অ্যানোটেশনটি বিশেষভাবে স্প্রিং জেডিবিসি-ভিত্তিক টেস্টিংয়ের জন্য ব্যবহৃত হয়।


@JdbcTest কী?

  • @JdbcTest হলো একটি স্প্রিং বুট টেস্টিং অ্যানোটেশন যা শুধুমাত্র স্প্রিং জেডিবিসি কম্পোনেন্ট (যেমন, JdbcTemplate) এবং রিলেটেড বিনগুলো টেস্ট করার জন্য ব্যবহৃত হয়।
  • এটি একটি লাইটওয়েট টেস্টিং এনভায়রনমেন্ট তৈরি করে যেখানে শুধুমাত্র ডাটাবেস অপারেশন এবং ডাটা অ্যাক্সেস টেস্ট করা যায়।
  • সাধারণত এটি H2 Database বা Embedded Database এর সাথে ব্যবহার করা হয়।

@JdbcTest এর বৈশিষ্ট্য

  1. Minimal Configuration:
    • শুধুমাত্র ডাটাবেস-সম্পর্কিত কনটেক্সট লোড করে।
    • অন্যান্য অপ্রয়োজনীয় বিন বা কনফিগারেশন লোড করে না।
  2. Auto-configured Database:
    • ডাটাবেস টেস্টের জন্য ইন-মেমরি ডাটাবেস (যেমন, H2) স্বয়ংক্রিয়ভাবে কনফিগার করে।
  3. Transactional Support:
    • প্রতিটি টেস্ট স্বয়ংক্রিয়ভাবে একটি ট্রানজেকশন ব্লকে চলে এবং টেস্ট শেষে rollback করা হয়।
  4. Integration with Flyway/Liquibase:
    • ডাটাবেস স্কিমা মাইগ্রেশন টুলের সাপোর্ট দেয়।

কনফিগারেশন এবং উদাহরণ

১. Dependency যোগ করা

Maven ব্যবহার করলে নিচের ডিপেন্ডেন্সি যোগ করতে হবে:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>test</scope>
</dependency>

২. Entity এবং Repository তৈরি করা

Student Entity:

public class Student {
    private int id;
    private String name;
    private int age;

    // Getters and Setters
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

Student Repository:

@Repository
public class StudentRepository {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    public List<Student> findAll() {
        String sql = "SELECT id, name, age FROM students";
        return jdbcTemplate.query(sql, (rs, rowNum) -> {
            Student student = new Student();
            student.setId(rs.getInt("id"));
            student.setName(rs.getString("name"));
            student.setAge(rs.getInt("age"));
            return student;
        });
    }
}

৩. Test Case তৈরি করা

Test Class:

@JdbcTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.ANY) // Use in-memory database
public class StudentRepositoryTest {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Autowired
    private StudentRepository studentRepository;

    @Test
    public void testFindAll() {
        // প্রাথমিক ডাটা ইনসার্ট করা
        jdbcTemplate.execute("INSERT INTO students (id, name, age) VALUES (1, 'John Doe', 20)");
        jdbcTemplate.execute("INSERT INTO students (id, name, age) VALUES (2, 'Jane Doe', 22)");

        // মেথড টেস্ট করা
        List<Student> students = studentRepository.findAll();

        // যাচাই করা
        assertEquals(2, students.size());
        assertEquals("John Doe", students.get(0).getName());
        assertEquals(20, students.get(0).getAge());
    }
}

বিস্তারিত ব্যাখ্যা

1. @JdbcTest অ্যানোটেশন:

  • এটি Spring Context তৈরি করে যা শুধুমাত্র JDBC সম্পর্কিত বীনগুলো লোড করে।

2. @AutoConfigureTestDatabase:

  • ইন-মেমরি ডাটাবেস (যেমন, H2) ব্যবহার করতে বলে।
  • replace = AutoConfigureTestDatabase.Replace.ANY স্বয়ংক্রিয়ভাবে ইন-মেমরি ডাটাবেস কনফিগার করে।

3. Data Preparation:

  • jdbcTemplate.execute() ব্যবহার করে টেস্টের জন্য প্রাথমিক ডাটা যোগ করা হয়।

4. Assertion:

  • JUnit বা TestNG ব্যবহার করে মেথডের আউটপুট যাচাই করা হয়।

Flyway/Liquibase Integration

যদি ডাটাবেস স্কিমা মাইগ্রেশনের জন্য Flyway বা Liquibase ব্যবহার করা হয়, তবে এটি @JdbcTest-এর সাথে স্বয়ংক্রিয়ভাবে কাজ করে।

Flyway Example:

application.properties:

spring.flyway.enabled=true
spring.flyway.locations=classpath:db/migration

@JdbcTest এর সুবিধা

  1. লাইটওয়েট টেস্টিং:
    • শুধুমাত্র প্রয়োজনীয় বীন লোড করে, ফলে টেস্ট দ্রুত চলে।
  2. ইন-মেমরি ডাটাবেস ব্যবহার:
    • ডাটাবেস টেস্টের জন্য সহজ এবং দ্রুত।
  3. Rollback Support:
    • প্রতিটি টেস্ট শেষে ডেটাবেস স্বয়ংক্রিয়ভাবে পূর্বাবস্থায় ফেরত যায়।
  4. স্বয়ংক্রিয় কনফিগারেশন:
    • কম কনফিগারেশন প্রয়োজন।

উপসংহার

Spring Test Framework এবং @JdbcTest অ্যানোটেশন ব্যবহার করে Spring JDBC ভিত্তিক ডাটাবেস টেস্ট করা খুবই সহজ এবং কার্যকর। এটি লাইটওয়েট টেস্টিং পরিবেশ প্রদান করে এবং ডেভেলপারদের ডাটাবেস-সম্পর্কিত মেথডগুলোর সঠিকতা যাচাই করতে সহায়তা করে। @JdbcTest এবং ইন-মেমরি ডাটাবেস (যেমন, H2) ব্যবহার করে টেস্টিং আরও দ্রুত এবং সুনির্দিষ্ট হয়।

Content added By
Promotion

Are you sure to start over?

Loading...