Java-তে Unit Testing হল সফটওয়্যার ডেভেলপমেন্টের একটি অত্যন্ত গুরুত্বপূর্ণ অংশ, যা কোডের বৈশিষ্ট্যগুলো বা ইউনিটগুলো পরীক্ষা করার জন্য ব্যবহৃত হয়। ডেটাবেজ অ্যাপ্লিকেশনগুলির জন্য, H2 Database এক ধরনের ইন-মেমরি ডেটাবেজ সরবরাহ করে, যা Java Unit Testing-এর জন্য খুবই কার্যকরী। H2 ডেটাবেজের মাধ্যমে টেস্টিং প্রক্রিয়া দ্রুত এবং সহজ হয়ে ওঠে, কারণ এটি সহজেই ইনস্টল এবং কনফিগার করা যায় এবং ইন-মেমরি মোডে কাজ করে, যার ফলে ডিস্কের প্রয়োজন হয় না।
এখানে, আমরা H2 Database ব্যবহার করে Java Unit Testing কিভাবে পরিচালনা করা যায়, তা নিয়ে বিস্তারিত আলোচনা করব।
H2 Database সাধারণত In-memory Database হিসেবে ব্যবহৃত হয়, যা Unit Testing-এর জন্য উপযুক্ত, কারণ এটি শুধুমাত্র RAM এ ডেটা সঞ্চয় করে এবং টেস্ট শেষ হওয়ার পর ডেটা মুছে ফেলা হয়। এতে করে টেস্টগুলো দ্রুত চলে এবং ডেটাবেজের কোনো স্থায়ী ফাইল তৈরি হয় না।
Java Unit Testing-এর জন্য বিভিন্ন টুল এবং ফ্রেমওয়ার্ক ব্যবহার করা হয়, যেমন:
এখানে আমরা JUnit ব্যবহার করে H2 Database এর সাথে Unit Testing কিভাবে করা যায়, তা দেখব।
প্রথমে, আপনার Maven বা Gradle প্রকল্পে H2 Database-এর ডিপেনডেন্সি যুক্ত করতে হবে।
Maven ব্যবহার করলে, আপনার pom.xml
-এ নিচের ডিপেনডেন্সি যুক্ত করুন:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
<scope>test</scope>
</dependency>
Gradle ব্যবহার করলে, আপনার build.gradle
-এ নিচের কোডটি যুক্ত করুন:
testImplementation 'com.h2database:h2:2.1.214'
H2 Database ব্যবহার করে JUnit টেস্ট তৈরি করতে, আপনাকে প্রথমে H2 ডেটাবেজ কনফিগার করতে হবে এবং তারপর SQL কুয়েরি চালিয়ে টেস্ট লেখার জন্য JUnit ব্যবহার করতে হবে।
ধরা যাক, আমাদের একটি users
টেবিল রয়েছে এবং আমরা H2 ডেটাবেজের সাহায্যে INSERT, SELECT, UPDATE এবং DELETE অপারেশনগুলো পরীক্ষা করতে চাই।
import org.junit.jupiter.api.*;
import java.sql.*;
import static org.junit.jupiter.api.Assertions.*;
public class H2DatabaseTest {
private Connection connection;
@BeforeEach
public void setUp() throws SQLException {
// In-memory H2 Database setup
connection = DriverManager.getConnection("jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;", "sa", "");
Statement statement = connection.createStatement();
// Creating users table
statement.execute("CREATE TABLE IF NOT EXISTS users (id INT PRIMARY KEY, name VARCHAR, age INT)");
// Insert a test user
statement.execute("INSERT INTO users (id, name, age) VALUES (1, 'John Doe', 25)");
}
@Test
public void testSelectQuery() throws SQLException {
// Select user by id
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM users WHERE id = ?");
preparedStatement.setInt(1, 1);
ResultSet resultSet = preparedStatement.executeQuery();
// Validate the result
assertTrue(resultSet.next());
assertEquals("John Doe", resultSet.getString("name"));
assertEquals(25, resultSet.getInt("age"));
}
@Test
public void testUpdateQuery() throws SQLException {
// Update user age
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE users SET age = ? WHERE id = ?");
preparedStatement.setInt(1, 30);
preparedStatement.setInt(2, 1);
preparedStatement.executeUpdate();
// Validate the update
PreparedStatement selectStmt = connection.prepareStatement("SELECT * FROM users WHERE id = ?");
selectStmt.setInt(1, 1);
ResultSet resultSet = selectStmt.executeQuery();
assertTrue(resultSet.next());
assertEquals(30, resultSet.getInt("age"));
}
@Test
public void testDeleteQuery() throws SQLException {
// Delete user by id
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM users WHERE id = ?");
preparedStatement.setInt(1, 1);
preparedStatement.executeUpdate();
// Validate the deletion
PreparedStatement selectStmt = connection.prepareStatement("SELECT * FROM users WHERE id = ?");
selectStmt.setInt(1, 1);
ResultSet resultSet = selectStmt.executeQuery();
assertFalse(resultSet.next());
}
@AfterEach
public void tearDown() throws SQLException {
// Close connection after each test
if (connection != null) {
connection.close();
}
}
}
users
টেবিল তৈরি করা হয়েছে।users
টেবিল থেকে ব্যবহারকারী নির্বাচন করি এবং তার ডেটা যাচাই করি।DriverManager.getConnection
ব্যবহার করা হয়েছে।H2 Database Java Unit Testing-এ ব্যবহারের জন্য অত্যন্ত উপযোগী, বিশেষ করে যখন ইন-মেমরি ডেটাবেজ প্রয়োজন হয়। JUnit-এর সাথে H2 ডেটাবেজ ব্যবহার করে CRUD অপারেশন পরীক্ষা করা সহজ এবং দ্রুত। H2 ডেটাবেজের In-memory মোড এবং lightweight প্রকৃতি Unit Testing প্রক্রিয়াকে আরও দ্রুত, কার্যকর এবং নির্ভরযোগ্য করে তোলে।
common.read_more