JUnit হল একটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক যা Java অ্যাপ্লিকেশনের জন্য ইউনিট টেস্টিং করতে ব্যবহৃত হয়। এটি ডেভেলপারদের কোডের ভ্যালিডিটি যাচাই করতে এবং সঠিক ফলাফল নিশ্চিত করতে সাহায্য করে। H2 Database হল একটি লাইটওয়েট, ইন-মেমরি রিলেশনাল ডেটাবেজ, যা সাধারণত টেস্টিং এবং ডেভেলপমেন্টের জন্য ব্যবহৃত হয়।
JUnit এবং H2 এর ইন্টিগ্রেশন ডেভেলপারদেরকে টেস্টিং এর সময় একটি ইন-মেমরি ডেটাবেজ ব্যবহার করতে দেয়, যাতে ডেটাবেজের ডেটা সরাসরি মেমরিতে থাকে এবং টেস্টিংয়ের পরে সেটি মুছে ফেলা হয়। এটি টেস্টিং দ্রুত এবং কার্যকরী করে তোলে।
এই টিউটোরিয়ালে আমরা JUnit এবং H2 ডেটাবেজের ইন্টিগ্রেশন নিয়ে আলোচনা করব এবং দেখাবো কীভাবে আপনি JUnit ব্যবহার করে H2 ডেটাবেজে টেস্ট কেস লিখতে পারেন।
JUnit এবং H2 ইন্টিগ্রেশন করতে হলে প্রথমে আপনাকে কিছু নির্দিষ্ট ডিপেনডেন্সি যুক্ত করতে হবে। H2 একটি ইন-মেমরি ডেটাবেজ, তাই টেস্টিংয়ের জন্য এটি খুবই উপযোগী। এখানে আমরা JUnit 5 এবং H2 ডেটাবেজের একটি সাধারণ ইন্টিগ্রেশন দেখাবো।
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 ব্যবহার করে 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, যা বিভিন্ন শর্ত পরীক্ষা করতে ব্যবহৃত হয়।INSERT
, UPDATE
, DELETE
পরীক্ষা করতে পারেন।JUnit এবং H2 ডেটাবেজের ইন্টিগ্রেশন আপনাকে আপনার Java অ্যাপ্লিকেশন বা সিস্টেমের জন্য সহজ এবং কার্যকরী টেস্টিং পরিবেশ প্রদান করে। H2 ডেটাবেজের ইন-মেমরি প্রকৃতি এবং JUnit ফ্রেমওয়ার্কের শক্তি দিয়ে আপনি দ্রুত, কার্যকরী এবং নির্ভরযোগ্য ইউনিট টেস্ট লিখতে পারেন।
common.read_more