iBATIS (বর্তমানে MyBatis) একটি জনপ্রিয় ORM ফ্রেমওয়ার্ক যা ডেটাবেস অপারেশনগুলো সহজ করে এবং JUnit হল একটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক যা Java কোডের জন্য ইউনিট টেস্ট লেখতে সহায়তা করে। iBATIS (MyBatis) এবং JUnit এর সমন্বয়ে আপনি ডেটাবেসের সাথে কাজ করার সময় টেস্টিং করতে পারবেন এবং সিস্টেমের আচরণ নিশ্চিত করতে পারবেন।
এখানে আমরা দেখব কিভাবে iBATIS (MyBatis) এবং JUnit একে অপরের সাথে ইন্টিগ্রেট করা যায়।
1. JUnit Integration Overview
JUnit টেস্টিং ফ্রেমওয়ার্ক ব্যবহার করে, আপনি iBATIS (MyBatis) এর মাধ্যমে ডেটাবেস অপারেশনের জন্য ইউনিট টেস্ট লিখতে পারেন। টেস্টিং করা সময় সঠিক ডেটাবেস কানেকশন নিশ্চিত করার জন্য কিছু কনফিগারেশন এবং ডেটাবেস ট্রানজেকশন ম্যানেজমেন্ট সেটআপ করা প্রয়োজন।
আমরা JUnit 5 এবং MyBatis এর সাথে H2 ইন-মেমরি ডেটাবেস ব্যবহার করে একটি ছোট উদাহরণ দেখাবো।
2. iBATIS (MyBatis) এবং JUnit Integration Steps
Step 1: Maven Dependencies (JUnit 5 এবং MyBatis)
JUnit 5 এবং MyBatis এর জন্য প্রয়োজনীয় ডিপেনডেন্সি গুলি আপনার pom.xml ফাইলে যোগ করুন।
<dependencies>
<!-- MyBatis Dependencies -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!-- H2 Database (In-Memory Database for Testing) -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
<scope>test</scope>
</dependency>
<!-- JUnit 5 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
</dependencies>
Step 2: Create iBATIS Configuration and Mapper Files
sql-map-config.xml Example:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS//DTD SQL Map Config 3.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-3.dtd">
<sqlMapConfig>
<!-- DataSource Configuration -->
<dataSource type="POOLED">
<property name="driver" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</dataSource>
<!-- Transaction Manager Configuration -->
<transactionManager type="JDBC"/>
<!-- Mapper Files -->
<sqlMap resource="com/example/mapper/EmployeeMapper.xml"/>
</sqlMapConfig>
EmployeeMapper.xml Example (for Insert Operation):
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//iBATIS//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/sql-map-3.dtd">
<mapper namespace="com.example.mapper.EmployeeMapper">
<insert id="insertEmployee" parameterType="com.example.model.Employee">
INSERT INTO employee (name, department)
VALUES (#{name}, #{department})
</insert>
<select id="getEmployeeById" resultType="com.example.model.Employee">
SELECT id, name, department
FROM employee
WHERE id = #{id}
</select>
</mapper>
3. Create Model Classes
Employee.java Example:
public class Employee {
private int id;
private String name;
private String department;
// 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 String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
}
4. Writing JUnit Test for MyBatis Integration
JUnit-এ MyBatis টেস্ট করতে আমরা in-memory H2 database ব্যবহার করব যাতে কোনো ডেটাবেস কনফিগারেশন পরিবর্তন করতে না হয়। আমরা JUnit 5 ব্যবহার করব এবং MyBatis সেশনের মাধ্যমে ডেটাবেস অপারেশনগুলো পরীক্ষা করব।
JUnit Test Example for MyBatis Integration:
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class EmployeeMapperTest {
private SqlSessionFactory sessionFactory;
@BeforeEach
public void setUp() {
// Build the SqlSessionFactory from the configuration
sessionFactory = new SqlSessionFactoryBuilder()
.build(EmployeeMapperTest.class.getResourceAsStream("/sql-map-config.xml"));
}
@Test
public void testInsertEmployee() {
try (SqlSession session = sessionFactory.openSession()) {
// Prepare the Employee data
Employee employee = new Employee();
employee.setName("John Doe");
employee.setDepartment("HR");
// Insert Employee using MyBatis Mapper
session.insert("com.example.mapper.EmployeeMapper.insertEmployee", employee);
session.commit();
// Retrieve the Employee by ID
Employee fetchedEmployee = session.selectOne("com.example.mapper.EmployeeMapper.getEmployeeById", 1);
// Validate the result
assertEquals("John Doe", fetchedEmployee.getName());
assertEquals("HR", fetchedEmployee.getDepartment());
}
}
}
Explanation of Test Code:
setUp():SqlSessionFactoryতৈরি করার জন্যsql-map-config.xmlকনফিগারেশন ফাইল ব্যবহার করা হয়।testInsertEmployee():- একটি
Employeeঅবজেক্ট তৈরি করা হচ্ছে এবংinsertEmployeeমেথড ব্যবহার করে ডেটাবেসে ইনসার্ট করা হচ্ছে। - তারপর
getEmployeeByIdমেথড ব্যবহার করে ওই কর্মচারীকে পুনরায় ডেটাবেস থেকে ফেচ করা হচ্ছে। - JUnit
assertEqualsব্যবহার করে পরীক্ষা করা হচ্ছে যে ডেটাবেসে সঠিকভাবে ডেটা ইনসার্ট হয়েছে কিনা।
- একটি
5. Running the Tests
JUnit টেস্ট চালানোর জন্য আপনি Maven বা Gradle ব্যবহার করতে পারেন।
For Maven:
# Run tests
mvn test
For Gradle:
# Run tests
gradle test
iBATIS (MyBatis) এবং JUnit ইন্টিগ্রেশন করা অত্যন্ত সহজ এবং কার্যকরী। আপনি JUnit ব্যবহার করে MyBatis এর SQL কুয়েরি এবং Mapper কার্যকারিতা সহজে টেস্ট করতে পারবেন। এই গাইডে:
- JUnit 5 টেস্টিং ফ্রেমওয়ার্ক ব্যবহার করে MyBatis টেস্টিং দেখানো হয়েছে।
- H2 in-memory database ব্যবহার করে ডেটাবেস কনফিগারেশন এবং টেস্ট করা হয়েছে।
- SqlSession ব্যবহার করে ডেটাবেস অপারেশন এবং তাদের ভ্যালিডেশন করা হয়েছে।
এই কৌশলগুলি আপনাকে iBATIS (MyBatis) এবং JUnit এর মাধ্যমে আপনার অ্যাপ্লিকেশন এবং ডেটাবেস অপারেশনগুলো কার্যকরভাবে টেস্ট করতে সহায়তা করবে।
Read more