JUnit এবং Mockito দুটি অত্যন্ত জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক যা Java এ ইউনিট টেস্ট লেখার জন্য ব্যবহৃত হয়। JUnit একটি টেস্ট ফ্রেমওয়ার্ক যা টেস্ট কেসের জন্য ব্যবহৃত হয়, আর Mockito একটি মকিং ফ্রেমওয়ার্ক যা সিস্টেমের আউটপুট পরীক্ষার জন্য মক (mock) অবজেক্ট তৈরি করতে সাহায্য করে।
Mockito ব্যবহার করে, আমরা JUnit টেস্টিংয়ে ডিপেনডেন্সি ইনজেকশন এবং মক অবজেক্ট তৈরি করতে পারি, যা টেস্টগুলোকে আরও কার্যকর এবং নির্ভুল করে তোলে। এই টিউটোরিয়ালে, আমরা JUnit এবং Mockito এর সমন্বয়ে টেস্ট লেখার প্রক্রিয়া আলোচনা করব।
১. JUnit এবং Mockito ব্যবহার করার জন্য ডিপেনডেন্সি
JUnit এবং Mockito ব্যবহার করতে হলে আপনাকে আপনার প্রোজেক্টে তাদের ডিপেনডেন্সি যোগ করতে হবে। Maven বা Gradle উভয় প্ল্যাটফর্মেই এটি করা যায়।
Maven Dependency:
<dependencies>
<!-- JUnit Dependency -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
<!-- Mockito Dependency -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.7.7</version>
<scope>test</scope>
</dependency>
</dependencies>
Gradle Dependency:
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testImplementation 'org.mockito:mockito-core:3.7.7'
}
২. Mockito এবং JUnit এর মধ্যে সম্পর্ক
Mockito ফ্রেমওয়ার্কটি মূলত JUnit টেস্টিংয়ে মক অবজেক্ট তৈরি করতে ব্যবহৃত হয়, যাতে আপনি সিস্টেমের নির্দিষ্ট অংশগুলো টেস্ট করতে পারেন। মক অবজেক্টের মাধ্যমে আপনি আসল অবজেক্টের আচরণ চেক করতে পারেন, এবং টেস্টের পরিবেশকে নিয়ন্ত্রণ করতে পারেন।
Mockito JUnit এর সাথে একত্রে কাজ করতে পারে এবং JUnit 5 এর সাথে MockitoExtension ব্যবহার করে মকিং টেস্টে অ্যাসিস্ট করতে পারে।
৩. Mockito এর সাথে JUnit 5 Integration
JUnit 5 এর সাথে Mockito ব্যবহার করার জন্য, আপনি @ExtendWith(MockitoExtension.class) অ্যানোটেশন ব্যবহার করতে পারেন। এটি Mockito এর টেস্টিং ফিচারগুলোকে JUnit টেস্টে এক্সটেন্ড করে।
উদাহরণ: Mockito এর সাথে JUnit 5 Integration
ExampleService.java:
public class ExampleService {
private final Dependency dependency;
public ExampleService(Dependency dependency) {
this.dependency = dependency;
}
public String processData() {
return "Processed: " + dependency.getData();
}
}
Dependency.java:
public class Dependency {
public String getData() {
return "Real Data";
}
}
ExampleServiceTest.java:
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.*;
import org.mockito.*;
public class ExampleServiceTest {
@Mock
private Dependency dependency; // Mock object of Dependency
private ExampleService exampleService;
@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this); // Initialize mocks
exampleService = new ExampleService(dependency); // Inject mock into service
}
@Test
void testProcessData() {
// Arrange
when(dependency.getData()).thenReturn("Mocked Data"); // Mock the behavior
// Act
String result = exampleService.processData(); // Call the method
// Assert
Assertions.assertEquals("Processed: Mocked Data", result); // Assert the result
}
}
ব্যাখ্যা:
- @Mock অ্যানোটেশন ব্যবহার করে
Dependencyঅবজেক্টটিকে মক করা হয়েছে। - MockitoAnnotations.openMocks(this) ব্যবহার করে Mockito অ্যানোটেশনকে ইনিশিয়ালাইজ করা হয়েছে।
when(dependency.getData()).thenReturn("Mocked Data")মক অবজেক্টের আচরণ কাস্টমাইজ করা হয়েছে।- assertEquals ব্যবহার করে রিটার্ন ভ্যালুর সাথে আসল আউটপুট যাচাই করা হয়েছে।
৪. Mockito এর সাহায্যে মকিং এর বিভিন্ন ধরন
৪.১ Mocking Void Methods
Mockito এর মাধ্যমে void মেথডগুলোও মক করা যায়। উদাহরণস্বরূপ, যদি কোনো মেথড কিছু রিটার্ন না করে (void), আপনি তখন doNothing() ব্যবহার করে তার আচরণ মক করতে পারবেন।
@Test
void testVoidMethod() {
// Arrange
doNothing().when(dependency).someVoidMethod();
// Act
exampleService.callVoidMethod();
// Assert
verify(dependency, times(1)).someVoidMethod(); // Verifying void method call
}
৪.২ Mocking with Argument Matchers
Mockito আপনাকে Argument Matchers ব্যবহার করতে দেয়, যা মেথড কলের আর্গুমেন্টের ভিত্তিতে মক আচরণ পরিবর্তন করতে সহায়তা করে।
@Test
void testWithArgumentMatchers() {
when(dependency.getData(anyString())).thenReturn("Mocked Data");
String result = exampleService.processData("Test");
Assertions.assertEquals("Processed: Mocked Data", result);
}
এখানে, anyString() ব্যবহৃত হয়েছে যাতে কোনো স্ট্রিং প্যারামিটার গ্রহণ করা যায়।
৫. Mockito এর সাথে Verification
Mockito ব্যবহার করে আপনি মেথড কলের সংখ্যা এবং তাদের আচরণ যাচাই করতে পারেন। এটি একটি শক্তিশালী বৈশিষ্ট্য, যেটি নিশ্চিত করে যে সিস্টেমের কোন মেথডটি কল হয়েছে কিনা এবং কতবার।
উদাহরণ: Verifying Method Calls
@Test
void testMethodCall() {
exampleService.processData();
// Verify that the method was called once
verify(dependency, times(1)).getData();
}
এখানে, verify ব্যবহার করে আপনি নিশ্চিত হচ্ছেন যে getData() মেথডটি শুধুমাত্র একবারই কল হয়েছে।
সারাংশ
JUnit এবং Mockito এর ইন্টিগ্রেশন আপনাকে সিস্টেমের আউটপুট এবং প্রেক্ষাপট অনুযায়ী টেস্ট কেস লিখতে সাহায্য করে। Mockito মকিং টেকনিক দ্বারা, আপনি সহজেই অপ্রয়োজনীয় বা বহিরাগত সিস্টেমের ডিপেনডেন্সি মক করতে পারেন এবং একে সহজেই JUnit টেস্ট কেসের মধ্যে ব্যবহার করতে পারেন। এর ফলে, টেস্টিংয়ের সময় আপনি ডেটা বা আচরণ কাস্টমাইজ করতে সক্ষম হবেন এবং আপনার টেস্টগুলো আরও নির্ভুলভাবে কাজ করবে।
Read more