EasyMock হল একটি লাইব্রেরি যা Java-তে mock objects তৈরি এবং তাদের আচরণ কাস্টমাইজ করতে ব্যবহৃত হয়। Behavior বা Expectation ডিফাইন করার মাধ্যমে, আমরা মক অবজেক্টের কার্যকলাপ নির্ধারণ করতে পারি এবং নিশ্চিত করতে পারি যে, আমাদের টেস্টে প্রত্যাশিত আচরণটি ঘটছে।
EasyMock এর মাধ্যমে আমরা একটি মক অবজেক্ট তৈরি করি এবং তার সাথে একটি expectation (অথবা behavior) সেট করি, যা বলবে যে ওই মক অবজেক্টটি কীভাবে কাজ করবে যখন তার উপর নির্দিষ্ট একটি মেথড কল করা হবে।
Behavior বা Expectation ডিফাইন করার প্রক্রিয়া:
- Mock Object তৈরি করা: প্রথমে একটি মক অবজেক্ট তৈরি করতে হবে যা একটি ইন্টারফেস বা ক্লাসের প্রতিনিধিত্ব করবে।
- Expectation ডিফাইন করা: তারপর আমরা মক অবজেক্টের জন্য একটি নির্দিষ্ট behavior বা expectation সেট করি, যেমন কোন মেথড কল হলে কী আউটপুট আশা করা হচ্ছে।
- Replay: মক অবজেক্টটি একটিভেট করার জন্য
replay()মেথড ব্যবহার করতে হয়, যাতে মক অবজেক্ট কার্যকরী হয় এবং এর ওপর কাজ শুরু করা যায়। - Verify: শেষ পর্যন্ত,
verify()মেথড ব্যবহার করে যাচাই করা হয় যে মক অবজেক্টে আশা করা কার্যকলাপ ঘটেছে কিনা।
EasyMock এর মাধ্যমে Behavior বা Expectation ডিফাইন করার উদাহরণ
ধরা যাক, আমাদের একটি Calculator ইন্টারফেস রয়েছে, এবং আমরা তার মক অবজেক্ট তৈরি করে কিছু আচরণ কাস্টমাইজ করতে চাই।
1. Calculator Interface:
public interface Calculator {
int add(int a, int b);
int subtract(int a, int b);
}
2. EasyMock Setup এবং Behavior ডিফাইন করা:
import static org.easymock.EasyMock.*;
public class EasyMockBehaviorExample {
public static void main(String[] args) {
// 1. Create a mock object of the Calculator interface
Calculator calculatorMock = createMock(Calculator.class);
// 2. Define the behavior (Expectation) for the mock object
expect(calculatorMock.add(2, 3)).andReturn(5); // Expect add(2, 3) to return 5
expect(calculatorMock.subtract(5, 3)).andReturn(2); // Expect subtract(5, 3) to return 2
// 3. Activate the mock object
replay(calculatorMock);
// 4. Test the methods with mock behavior
System.out.println("Addition result: " + calculatorMock.add(2, 3)); // Should return 5
System.out.println("Subtraction result: " + calculatorMock.subtract(5, 3)); // Should return 2
// 5. Verify that the expected methods were called
verify(calculatorMock);
}
}
Output:
Addition result: 5
Subtraction result: 2
EasyMock এর Behavior বা Expectation ডিফাইন করার পদ্ধতি:
expect(): এই মেথডটি মক অবজেক্টের জন্য একটি expectation সেট করে, অর্থাৎ আমরা জানিয়ে দিই যে নির্দিষ্ট মেথডটি কোন ইনপুটের জন্য কী আউটপুট দিবে।- উদাহরণ:
expect(calculatorMock.add(2, 3)).andReturn(5);
- উদাহরণ:
andReturn():expect()এর পর আমরাandReturn()মেথড ব্যবহার করি যা মক অবজেক্টের জন্য প্রত্যাশিত আউটপুট নির্ধারণ করে।- উদাহরণ:
andReturn(5)— যখনadd(2, 3)মেথড কল হবে, তখন এটি ৫ ফেরত দেবে।
- উদাহরণ:
replay(): এই মেথডটি মক অবজেক্টকে active করে এবং সেই মক অবজেক্টের behavior অনুযায়ী কাজ করতে বলে। এটি মক অবজেক্টে সেট করা প্রত্যাশিত আচরণ কার্যকর করতে ব্যবহৃত হয়।- উদাহরণ:
replay(calculatorMock);
- উদাহরণ:
verify(): এই মেথডটি যাচাই করে যে সমস্ত expectations সঠিকভাবে পূর্ণ হয়েছে কিনা। এটি নিশ্চিত করে যে, আমাদের মক অবজেক্টে নির্ধারিত কার্যকলাপ (methods calls) ঘটেছে।- উদাহরণ:
verify(calculatorMock);
- উদাহরণ:
EasyMock এর মাধ্যমে Multiple Expectations ডিফাইন করা
আপনি একাধিক মেথডের জন্য একাধিক expectationও ডিফাইন করতে পারেন। নিচে একটি উদাহরণ দেওয়া হল যেখানে দুটি মেথডের জন্য আলাদা আলাদা expectation সেট করা হয়েছে।
public class EasyMockMultipleExpectations {
public static void main(String[] args) {
// Create a mock object of Calculator
Calculator calculatorMock = createMock(Calculator.class);
// Define multiple behaviors (expectations)
expect(calculatorMock.add(3, 4)).andReturn(7); // Expect add(3, 4) to return 7
expect(calculatorMock.subtract(10, 5)).andReturn(5); // Expect subtract(10, 5) to return 5
// Activate the mock object
replay(calculatorMock);
// Test the methods with mock behavior
System.out.println("Addition result: " + calculatorMock.add(3, 4)); // Should return 7
System.out.println("Subtraction result: " + calculatorMock.subtract(10, 5)); // Should return 5
// Verify that the expected methods were called
verify(calculatorMock);
}
}
Output:
Addition result: 7
Subtraction result: 5
Summary
EasyMock এর মাধ্যমে Behavior বা Expectation ডিফাইন করা খুবই সহজ এবং কার্যকরী। আমরা মক অবজেক্টের জন্য expect(), andReturn() এর মতো মেথড ব্যবহার করে নির্দিষ্ট ইনপুটের জন্য নির্দিষ্ট আউটপুট প্রত্যাশা (expectation) নির্ধারণ করি। পরে, replay() মেথডের মাধ্যমে সেই মক অবজেক্টটির আচরণ কার্যকরী করি এবং verify() মেথডের মাধ্যমে যাচাই করি যে মক অবজেক্টে প্রত্যাশিত মেথডগুলি সঠিকভাবে কল হয়েছে কিনা।
এই পদ্ধতির মাধ্যমে, আপনি বাইরের নির্ভরতা (dependencies) ব্যবহার না করে শুধুমাত্র আপনার কোডের নির্দিষ্ট অংশের টেস্ট করতে পারেন, যা unit testing কে আরও দ্রুত এবং কার্যকরী করে তোলে।
Read more