Spring Test Framework হলো স্প্রিং অ্যাপ্লিকেশনগুলোর টেস্টিং এর জন্য একটি শক্তিশালী এবং ফিচার-সমৃদ্ধ ফ্রেমওয়ার্ক। এটি বিভিন্ন কনটেক্সট এবং কম্পোনেন্টের কার্যকারিতা নিশ্চিত করতে সাহায্য করে। @JdbcTest অ্যানোটেশনটি বিশেষভাবে স্প্রিং জেডিবিসি-ভিত্তিক টেস্টিংয়ের জন্য ব্যবহৃত হয়।
@JdbcTest কী?
- @JdbcTest হলো একটি স্প্রিং বুট টেস্টিং অ্যানোটেশন যা শুধুমাত্র স্প্রিং জেডিবিসি কম্পোনেন্ট (যেমন,
JdbcTemplate) এবং রিলেটেড বিনগুলো টেস্ট করার জন্য ব্যবহৃত হয়। - এটি একটি লাইটওয়েট টেস্টিং এনভায়রনমেন্ট তৈরি করে যেখানে শুধুমাত্র ডাটাবেস অপারেশন এবং ডাটা অ্যাক্সেস টেস্ট করা যায়।
- সাধারণত এটি H2 Database বা Embedded Database এর সাথে ব্যবহার করা হয়।
@JdbcTest এর বৈশিষ্ট্য
- Minimal Configuration:
- শুধুমাত্র ডাটাবেস-সম্পর্কিত কনটেক্সট লোড করে।
- অন্যান্য অপ্রয়োজনীয় বিন বা কনফিগারেশন লোড করে না।
- Auto-configured Database:
- ডাটাবেস টেস্টের জন্য ইন-মেমরি ডাটাবেস (যেমন, H2) স্বয়ংক্রিয়ভাবে কনফিগার করে।
- Transactional Support:
- প্রতিটি টেস্ট স্বয়ংক্রিয়ভাবে একটি ট্রানজেকশন ব্লকে চলে এবং টেস্ট শেষে rollback করা হয়।
- 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 এর সুবিধা
- লাইটওয়েট টেস্টিং:
- শুধুমাত্র প্রয়োজনীয় বীন লোড করে, ফলে টেস্ট দ্রুত চলে।
- ইন-মেমরি ডাটাবেস ব্যবহার:
- ডাটাবেস টেস্টের জন্য সহজ এবং দ্রুত।
- Rollback Support:
- প্রতিটি টেস্ট শেষে ডেটাবেস স্বয়ংক্রিয়ভাবে পূর্বাবস্থায় ফেরত যায়।
- স্বয়ংক্রিয় কনফিগারেশন:
- কম কনফিগারেশন প্রয়োজন।
উপসংহার
Spring Test Framework এবং @JdbcTest অ্যানোটেশন ব্যবহার করে Spring JDBC ভিত্তিক ডাটাবেস টেস্ট করা খুবই সহজ এবং কার্যকর। এটি লাইটওয়েট টেস্টিং পরিবেশ প্রদান করে এবং ডেভেলপারদের ডাটাবেস-সম্পর্কিত মেথডগুলোর সঠিকতা যাচাই করতে সহায়তা করে। @JdbcTest এবং ইন-মেমরি ডাটাবেস (যেমন, H2) ব্যবহার করে টেস্টিং আরও দ্রুত এবং সুনির্দিষ্ট হয়।
Read more