Apache Commons CLI লাইব্রেরি কমান্ড লাইন আর্গুমেন্ট পার্সিং সহজ করে তোলে। তবে, অ্যাপ্লিকেশন ডেভেলপমেন্টের সময় Mocking এবং Stubbing এর মাধ্যমে কোডের টেস্টিং করা গুরুত্বপূর্ণ হয়ে ওঠে। Mocking এবং Stubbing হল টেস্টিং কৌশল যা অবজেক্টগুলির আচরণ সিমুলেট করতে ব্যবহৃত হয়, যাতে আপনি ইউনিট টেস্টের জন্য নির্দিষ্ট আর্গুমেন্ট এবং আউটপুট পরীক্ষা করতে পারেন।
এই গাইডে, আমরা Apache Commons CLI ব্যবহার করে কিভাবে Mocking এবং Stubbing টেকনিক প্রয়োগ করা যায় তা দেখব।
Mocking এবং Stubbing: সংজ্ঞা
- Mocking: এটি একটি টেস্টিং কৌশল যেখানে আপনি কোনো অবজেক্টের আচরণ প্রাক-নির্ধারণ করেন। সাধারণত এটি অবজেক্টের সাথে সুনির্দিষ্ট মিথস্ক্রিয়া পরীক্ষার জন্য ব্যবহৃত হয়।
- Stubbing: এটি একটি টেস্টিং কৌশল যেখানে একটি মেথডের আউটপুট প্রাক-নির্ধারণ করা হয়, সাধারণত কোন নির্দিষ্ট আর্গুমেন্ট দিয়ে মেথডটি চালানোর সময়।
Mocking এবং Stubbing সাধারণত Mockito বা EasyMock লাইব্রেরি ব্যবহার করে করা হয়। এই গাইডে আমরা Mockito ব্যবহার করে Apache Commons CLI এর জন্য Mocking এবং Stubbing কৌশল প্রয়োগ করার উদাহরণ দেখবো।
ধাপ 1: Maven এ Mockito যোগ করা
প্রথমে, আপনার pom.xml ফাইলে Mockito লাইব্রেরি যোগ করতে হবে:
<dependencies>
<!-- Mockito Dependency -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.12.4</version>
<scope>test</scope>
</dependency>
</dependencies>
এটি Mockito লাইব্রেরি অন্তর্ভুক্ত করবে, যা Mocking এবং Stubbing এর জন্য ব্যবহৃত হবে।
ধাপ 2: Apache Commons CLI এর জন্য Mocking এবং Stubbing টেকনিক প্রয়োগ করা
Mocking Example: CommandLineParser Mock করা
এখানে আমরা CommandLineParser এর একটি মক তৈরি করব এবং এর মেথডের আচরণ মক করব।
import org.apache.commons.cli.*;
import org.mockito.Mockito;
import org.junit.jupiter.api.Test;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
public class MockingExample {
@Test
public void testMockCommandLineParser() {
// CommandLineParser এর মক তৈরি করা
CommandLineParser parser = Mockito.mock(CommandLineParser.class);
CommandLine cmd = Mockito.mock(CommandLine.class);
try {
// CommandLineParser এর parse() মেথডের মক আচরণ সেট করা
when(parser.parse(any(), any())).thenReturn(cmd);
when(cmd.getOptionValue("input")).thenReturn("mockInput.txt");
// CommandLineParser ব্যবহার করা
String[] args = {"-i", "input.txt"};
CommandLine result = parser.parse(new Options(), args);
// মক করা আউটপুট যাচাই করা
assertEquals("mockInput.txt", result.getOptionValue("input"));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- আমরা CommandLineParser এবং CommandLine এর মক তৈরি করেছি।
- Mockito এর when() এবং thenReturn() মেথড ব্যবহার করে আমরা মেথডের আউটপুটকে সিমুলেট করেছি।
getOptionValue("input")মেথডের আউটপুট আমরা মক করেছি যাতে এটি "mockInput.txt" রিটার্ন করে।
Stubbing Example: Option থেকে মান বের করা
এখন, আমরা Option এর মক তৈরি করব এবং একটি নির্দিষ্ট আর্গুমেন্টের জন্য স্টাবিং প্রয়োগ করব।
import org.apache.commons.cli.*;
import org.mockito.Mockito;
import org.junit.jupiter.api.Test;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
public class StubbingExample {
@Test
public void testStubbingOptionValue() {
// Option এর মক তৈরি করা
Option input = Mockito.mock(Option.class);
when(input.getOpt()).thenReturn("i");
when(input.getDescription()).thenReturn("Input file");
// Option এর মান স্টাব করা
when(input.getLongOpt()).thenReturn("input");
// Option স্টাবিংয়ের মাধ্যমে মান যাচাই করা
assertEquals("i", input.getOpt());
assertEquals("Input file", input.getDescription());
assertEquals("input", input.getLongOpt());
}
}
ব্যাখ্যা:
- এখানে Option ক্লাসের একটি মক তৈরি করেছি এবং getOpt(), getDescription() এবং getLongOpt() মেথডগুলোকে স্টাব করেছি।
- Mockito এর
when()মেথড ব্যবহার করে আমরা প্রত্যাশিত আউটপুট সেট করেছি এবং এটি পরীক্ষার জন্য ব্যবহার করেছি।
ধাপ 3: Complex Test Case with CommandLineParser and Mocking
এখন, আমরা একটি জটিল টেস্ট কেস তৈরি করবো যেখানে Apache Commons CLI এর CommandLineParser এবং Options সহ মকিং এবং স্টাবিং ব্যবহৃত হবে।
import org.apache.commons.cli.*;
import org.mockito.Mockito;
import org.junit.jupiter.api.Test;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
public class ComplexMockingTest {
@Test
public void testCommandLineWithMockedParser() {
// CommandLineParser এবং CommandLine এর মক তৈরি করা
CommandLineParser parser = Mockito.mock(CommandLineParser.class);
CommandLine cmd = Mockito.mock(CommandLine.class);
// আর্গুমেন্ট গুলি
String[] args = {"-i", "input.txt", "-o", "output.txt"};
try {
// CommandLineParser এর মক আচরণ সেট করা
when(parser.parse(any(), eq(args))).thenReturn(cmd);
when(cmd.hasOption("i")).thenReturn(true);
when(cmd.getOptionValue("i")).thenReturn("input.txt");
when(cmd.hasOption("o")).thenReturn(true);
when(cmd.getOptionValue("o")).thenReturn("output.txt");
// আর্গুমেন্ট পার্সিং
cmd = parser.parse(new Options(), args);
// আর্গুমেন্টের জন্য স্টাব করা মান যাচাই করা
assertTrue(cmd.hasOption("i"));
assertEquals("input.txt", cmd.getOptionValue("i"));
assertTrue(cmd.hasOption("o"));
assertEquals("output.txt", cmd.getOptionValue("o"));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- আমরা CommandLineParser এবং CommandLine এর মক তৈরি করেছি।
- Mockito এর মাধ্যমে আর্গুমেন্ট পার্সিংয়ের জন্য স্টাবিং করেছি, যেমন hasOption("i") এবং getOptionValue("i") মেথডে মক করা আউটপুট সঠিকভাবে রিটার্ন করতে।
- তারপর আমরা assertTrue এবং assertEquals দিয়ে আর্গুমেন্টের মান যাচাই করেছি।
সারাংশ
Apache Commons CLI এর সাথে Mocking এবং Stubbing টেকনিক ব্যবহার করে আপনি কমান্ড লাইন আর্গুমেন্ট পার্সিংয়ের জন্য ইউনিট টেস্ট তৈরি করতে পারেন। Mockito লাইব্রেরি ব্যবহার করে আপনি সহজেই CommandLineParser, Option, এবং CommandLine এর মতো ক্লাসগুলো মক বা স্টাব করতে পারেন। এটি আপনার অ্যাপ্লিকেশন এবং লাইব্রেরির কোডের আচরণ সঠিকভাবে পরীক্ষা করার সুযোগ দেয়, যা সফটওয়্যার ডেভেলপমেন্টের ক্ষেত্রে গুরুত্বপূর্ণ।
Read more