Spring Batch একটি শক্তিশালী ব্যাচ প্রসেসিং ফ্রেমওয়ার্ক যা বড় ডেটাসেট ম্যানিপুলেশন এবং প্রক্রিয়ার জন্য ব্যবহৃত হয়। যখন আমরা Spring Batch অ্যাপ্লিকেশন ডেভেলপ করি, তখন তার কার্যকারিতা নিশ্চিত করতে Unit Testing এবং Integration Testing অত্যন্ত গুরুত্বপূর্ণ। Spring Batch জব এবং স্টেপের পরীক্ষা করার জন্য, Spring Batch এবং Spring Boot এর টেস্টিং ফিচারগুলোর সাহায্য নেওয়া যায়।
Unit এবং Integration Testing এ আপনি আপনার ItemReader, ItemProcessor, ItemWriter, Step, এবং Job এর কার্যকারিতা যাচাই করতে পারেন। Spring Batch এ টেস্টিং অনেকটা সহজ হয়ে যায় Spring Boot স্টার্টার ব্যাচ এবং JUnit ব্যবহার করে।
Spring Batch Job এর Unit Testing
Unit Testing হল একটি নির্দিষ্ট কম্পোনেন্ট বা ফাংশনালিটির পরীক্ষণ, যেখানে আপনি শুধুমাত্র একটি নির্দিষ্ট অংশের কার্যকারিতা পরীক্ষা করেন, যেমন ItemProcessor বা ItemReader।
1. ItemProcessor এর Unit Test
ধরা যাক, আমাদের EmployeeItemProcessor তৈরি করা আছে যা একটি Employee অবজেক্টের নাম প্রসেস করে। এর Unit Test দেখতে কীভাবে হবে তা নিচে দেয়া হল:
package com.example.demo;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class EmployeeItemProcessorTest {
private final EmployeeItemProcessor processor = new EmployeeItemProcessor();
@Test
public void testProcess() throws Exception {
Employee employee = new Employee();
employee.setFirstName("John");
employee.setLastName("Doe");
Employee processedEmployee = processor.process(employee);
assertEquals("JOHN DOE", processedEmployee.getFullName()); // Validating processed name
}
}
এখানে, EmployeeItemProcessor এর process() মেথড টেস্ট করা হচ্ছে। আমরা নিশ্চিত করছি যে, প্রথম নাম এবং শেষ নামকে সঠিকভাবে uppercase এবং একত্রে fullName এ সেট করা হচ্ছে।
2. ItemReader এর Unit Test
ItemReader এর মাধ্যমে API বা ডাটাবেস থেকে ডেটা পড়া হয়। এর Unit Test করতে হলে, আপনাকে মক ডাটা তৈরি করতে হবে। নিচে একটি ItemReader এর Unit Test দেখানো হলো:
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.springframework.batch.item.support.ListItemReader;
import static org.junit.jupiter.api.Assertions.*;
import java.util.Arrays;
import java.util.List;
public class EmployeeItemReaderTest {
@Test
public void testRead() throws Exception {
List<Employee> employees = Arrays.asList(new Employee("John", "Doe"));
ListItemReader<Employee> reader = new ListItemReader<>(employees);
Employee employee = reader.read(); // Reading the first employee
assertNotNull(employee);
assertEquals("John", employee.getFirstName());
}
}
এখানে, ListItemReader ব্যবহার করা হয়েছে, যেখানে একটি তালিকা ডেটা হিসেবে দেয়া হয়েছে। read() মেথড পরীক্ষা করা হয়েছে যাতে নিশ্চিত করা যায় যে ডেটা সঠিকভাবে রিড করা হচ্ছে।
Spring Batch Job এর Integration Testing
Integration Testing হল পুরো সিস্টেমের কার্যকারিতা পরীক্ষা করা, যেখানে একাধিক কম্পোনেন্ট একসাথে কাজ করে। Spring Batch এ আপনি একটি Job এবং Step এর কার্যকারিতা পরীক্ষা করতে পারেন।
1. Job এর Integration Test
Spring Batch Job এর Integration Test করতে আপনি Spring Boot Test এবং @SpringBatchTest ব্যবহার করতে পারেন। এটি Spring Batch এর JobLauncher এবং অন্যান্য কম্পোনেন্টের বাস্তব কাজ পরীক্ষা করার জন্য ব্যবহৃত হয়।
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.Step;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.beans.factory.annotation.Autowired;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
@EnableBatchProcessing
public class EmployeeJobIntegrationTest {
@Autowired
private JobLauncher jobLauncher;
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
private Job job;
@Test
public void testJobExecution() throws Exception {
// Trigger job execution
JobParameters jobParameters = new JobParameters();
var jobExecution = jobLauncher.run(job, jobParameters);
// Check job execution status
assertEquals("COMPLETED", jobExecution.getStatus().toString());
}
}
এখানে, @SpringBootTest এবং @EnableBatchProcessing এর মাধ্যমে Spring Batch কনফিগারেশন লোড করা হয়েছে এবং jobLauncher.run() ব্যবহার করে Job এক্সিকিউট করা হয়েছে। এর মাধ্যমে আমরা নিশ্চিত হচ্ছি যে Job সঠিকভাবে কাজ করছে।
2. Step এর Integration Test
Spring Batch এ একটি Step পরীক্ষা করার জন্য আপনি ঐ Step এর মধ্যে ব্যবহৃত ItemReader, ItemProcessor, এবং ItemWriter এর কার্যকারিতা পরীক্ষা করতে পারেন। নিচে একটি Step এর Integration Test দেখানো হয়েছে:
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.core.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
@EnableBatchProcessing
public class EmployeeStepIntegrationTest {
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private Step step1;
@Test
public void testStepExecution() throws Exception {
// Running the step manually
var jobExecution = step1.execute(null, null);
// Assert the step execution status
assertTrue(jobExecution.getExitStatus().isSuccessful());
}
}
এখানে Step এর কার্যকারিতা যাচাই করা হচ্ছে। Step টেস্ট করার জন্য আমরা Step কে এক্সিকিউট করছি এবং তার ExitStatus যাচাই করছি, যা সফল কিনা তা জানাবে।
Spring Batch Job এবং Step Testing এ অন্যান্য ফিচার
- JobRepository: Spring Batch এ Job এবং Step এর ইতিহাস রাখতে JobRepository ব্যবহৃত হয়। Unit Test এর সময় আপনি মক (mock) ব্যবহার করে JobRepository কে ইনজেক্ট করতে পারেন।
- @MockBean: Spring Batch এর কম্পোনেন্ট যেমন ItemReader, ItemProcessor, এবং ItemWriter এর জন্য @MockBean ব্যবহার করে মক তৈরি করা যেতে পারে।
- TestExecutionListener: Spring Batch এ টেস্টের জন্য TestExecutionListener ব্যবহার করা যেতে পারে যা টেস্ট চলাকালীন Job বা Step এর কার্যকারিতা পরীক্ষায় সহায়তা করে।
সারাংশ
Spring Batch Job এর Unit এবং Integration Testing করার জন্য, JUnit এবং Spring Boot Test এর ব্যবহার অত্যন্ত গুরুত্বপূর্ণ। Unit Testing এর মাধ্যমে আপনি ItemReader, ItemProcessor, এবং ItemWriter এর নির্দিষ্ট কাজ পরীক্ষা করতে পারেন। Integration Testing এর মাধ্যমে আপনি পুরো Job এবং Step এর কার্যকারিতা পরীক্ষা করতে পারেন, এবং Spring Batch এর স্বয়ংক্রিয় এবং মক ব্যবস্থার মাধ্যমে কার্যকারিতা নিশ্চিত করতে পারেন। Spring Batch এর পরীক্ষণ সহজ এবং কার্যকরী করতে @SpringBatchTest, @MockBean, এবং TestExecutionListener ব্যবহার করা যেতে পারে।
Read more