JUnit এবং H2 Integration

Database Tutorials - এইচ২ ডাটাবেস (H2 Database) H2 Database এর জন্য ডেটাবেজ টেস্টিং |
228
228

JUnit হল একটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক যা Java অ্যাপ্লিকেশনের জন্য ইউনিট টেস্টিং করতে ব্যবহৃত হয়। এটি ডেভেলপারদের কোডের ভ্যালিডিটি যাচাই করতে এবং সঠিক ফলাফল নিশ্চিত করতে সাহায্য করে। H2 Database হল একটি লাইটওয়েট, ইন-মেমরি রিলেশনাল ডেটাবেজ, যা সাধারণত টেস্টিং এবং ডেভেলপমেন্টের জন্য ব্যবহৃত হয়।

JUnit এবং H2 এর ইন্টিগ্রেশন ডেভেলপারদেরকে টেস্টিং এর সময় একটি ইন-মেমরি ডেটাবেজ ব্যবহার করতে দেয়, যাতে ডেটাবেজের ডেটা সরাসরি মেমরিতে থাকে এবং টেস্টিংয়ের পরে সেটি মুছে ফেলা হয়। এটি টেস্টিং দ্রুত এবং কার্যকরী করে তোলে।

এই টিউটোরিয়ালে আমরা JUnit এবং H2 ডেটাবেজের ইন্টিগ্রেশন নিয়ে আলোচনা করব এবং দেখাবো কীভাবে আপনি JUnit ব্যবহার করে H2 ডেটাবেজে টেস্ট কেস লিখতে পারেন।


JUnit এবং H2 Integration সেটআপ

JUnit এবং H2 ইন্টিগ্রেশন করতে হলে প্রথমে আপনাকে কিছু নির্দিষ্ট ডিপেনডেন্সি যুক্ত করতে হবে। H2 একটি ইন-মেমরি ডেটাবেজ, তাই টেস্টিংয়ের জন্য এটি খুবই উপযোগী। এখানে আমরা JUnit 5 এবং H2 ডেটাবেজের একটি সাধারণ ইন্টিগ্রেশন দেখাবো।

১. Maven বা Gradle ডিপেনডেন্সি সেটআপ

Maven ব্যবহার করলে pom.xml ফাইলে নিচের ডিপেনডেন্সি যুক্ত করুন:

<dependencies>
    <!-- JUnit 5 Dependency -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.7.2</version>
        <scope>test</scope>
    </dependency>

    <!-- H2 Database Dependency -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.200</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Gradle ব্যবহার করলে build.gradle ফাইলে এই ডিপেনডেন্সি যুক্ত করুন:

dependencies {
    // JUnit 5 Dependency
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.2'

    // H2 Database Dependency
    testImplementation 'com.h2database:h2:1.4.200'
}

২. JUnit টেস্ট ক্লাস তৈরি করা

এখন, JUnit ব্যবহার করে H2 ডেটাবেজের সাথে কাজ করার জন্য একটি টেস্ট ক্লাস তৈরি করা হবে। আমরা একটি সাধারণ Student টেবিল তৈরি করব এবং H2 ডেটাবেজে টেস্ট কেস লিখব।

import org.junit.jupiter.api.*;
import java.sql.*;

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

class H2DatabaseTest {

    private static Connection connection;

    @BeforeAll
    static void setup() throws SQLException {
        // H2 Database connection setup
        connection = DriverManager.getConnection("jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1", "sa", "");
        Statement stmt = connection.createStatement();
        stmt.execute("CREATE TABLE students (id INT PRIMARY KEY, name VARCHAR(255), age INT)");
    }

    @AfterAll
    static void tearDown() throws SQLException {
        // Close connection after tests are done
        connection.close();
    }

    @Test
    void testInsertStudent() throws SQLException {
        // Insert data into students table
        String insertSQL = "INSERT INTO students (id, name, age) VALUES (1, 'John Doe', 22)";
        PreparedStatement stmt = connection.prepareStatement(insertSQL);
        stmt.executeUpdate();

        // Check if the student is inserted successfully
        String selectSQL = "SELECT name FROM students WHERE id = 1";
        ResultSet rs = stmt.executeQuery(selectSQL);
        assertTrue(rs.next());
        assertEquals("John Doe", rs.getString("name"));
    }

    @Test
    void testUpdateStudent() throws SQLException {
        // Insert data into students table
        String insertSQL = "INSERT INTO students (id, name, age) VALUES (2, 'Jane Doe', 20)";
        PreparedStatement stmt = connection.prepareStatement(insertSQL);
        stmt.executeUpdate();

        // Update student data
        String updateSQL = "UPDATE students SET age = 21 WHERE id = 2";
        stmt.executeUpdate(updateSQL);

        // Verify the data is updated
        String selectSQL = "SELECT age FROM students WHERE id = 2";
        ResultSet rs = stmt.executeQuery(selectSQL);
        assertTrue(rs.next());
        assertEquals(21, rs.getInt("age"));
    }

    @Test
    void testDeleteStudent() throws SQLException {
        // Insert data into students table
        String insertSQL = "INSERT INTO students (id, name, age) VALUES (3, 'Mike Doe', 25)";
        PreparedStatement stmt = connection.prepareStatement(insertSQL);
        stmt.executeUpdate();

        // Delete student data
        String deleteSQL = "DELETE FROM students WHERE id = 3";
        stmt.executeUpdate(deleteSQL);

        // Verify the student is deleted
        String selectSQL = "SELECT id FROM students WHERE id = 3";
        ResultSet rs = stmt.executeQuery(selectSQL);
        assertFalse(rs.next());
    }
}

৩. টেস্ট ক্লাসের ব্যাখ্যা

  • @BeforeAll: এই অ্যানোটেশনটি একটি মেথডের উপরে ব্যবহার করা হয় যা সমস্ত টেস্টের আগে একবারই চালানো হয়। এটি H2 ডেটাবেজের জন্য একটি কনেকশন তৈরি করে এবং students টেবিলটি তৈরি করে।
  • @AfterAll: এই অ্যানোটেশনটি একটি মেথডের উপরে ব্যবহার করা হয় যা সমস্ত টেস্টের পরে একবারই চালানো হয়। এটি ডেটাবেজ কনেকশনটি বন্ধ করে।
  • @Test: এই অ্যানোটেশনটি টেস্ট মেথডের উপরে ব্যবহার করা হয়। এই মেথডগুলোতে SQL কুয়েরি এক্সিকিউট করা হয় এবং পরীক্ষণ করা হয় যে প্রত্যাশিত ফলাফল এসেছে কিনা।
  • assertTrue, assertFalse, assertEquals: এগুলি JUnit Assertions, যা বিভিন্ন শর্ত পরীক্ষা করতে ব্যবহৃত হয়।

JUnit এবং H2 এর সুবিধা

  1. ইন-মেমরি ডেটাবেজ: H2 ডেটাবেজ ইন-মেমরি মোডে কাজ করে, যা টেস্টিংয়ের জন্য দ্রুত এবং কার্যকরী। টেস্টের পরে ডেটাবেজের ডেটা মুছে ফেলা যায়।
  2. প্রতিটি টেস্টের জন্য নতুন ডেটাবেজ: H2 ইন-মেমরি ডেটাবেজ সাপোর্ট করার কারণে, আপনি প্রতিটি টেস্ট কেসে একটি নতুন ডেটাবেজ তৈরি করতে পারেন, যার ফলে টেস্টিংয়ের সময় ডেটা পরিষ্কার থাকে এবং কোডের কোনও স্টেট ঝুঁকি থাকে না।
  3. বিভিন্ন টেস্ট কেসে ডেটাবেজের আর্গুমেন্ট: H2 ডেটাবেজ ব্যবহার করে আপনি বিভিন্ন SQL অপারেশন যেমন INSERT, UPDATE, DELETE পরীক্ষা করতে পারেন।
  4. কনফিগারেশন এবং পারফরম্যান্স: এটি দ্রুত কনফিগারেশন এবং রিসোর্স ব্যবহারের মাধ্যমে বিভিন্ন ডেটাবেজ অপারেশন টেস্ট করার সুবিধা প্রদান করে।

উপসংহার

JUnit এবং H2 ডেটাবেজের ইন্টিগ্রেশন আপনাকে আপনার Java অ্যাপ্লিকেশন বা সিস্টেমের জন্য সহজ এবং কার্যকরী টেস্টিং পরিবেশ প্রদান করে। H2 ডেটাবেজের ইন-মেমরি প্রকৃতি এবং JUnit ফ্রেমওয়ার্কের শক্তি দিয়ে আপনি দ্রুত, কার্যকরী এবং নির্ভরযোগ্য ইউনিট টেস্ট লিখতে পারেন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion