EasyMock এর মাধ্যমে Callbacks ব্যবহার করে আমরা মক অবজেক্টের আচরণ কাস্টমাইজ করতে পারি। Callbacks হল এমন মেথড বা কার্যাবলি যা মক অবজেক্টের আচরণ runtime এর সময় পরিবর্তন বা কাস্টমাইজ করার সুযোগ দেয়। বিশেষ করে, যখন কোন মেথডের আউটপুট নির্ভর করে ইনপুটের উপর, তখন Callback ব্যবহার করে ডাইনামিকভাবে বিভিন্ন আচরণ প্রদান করা যায়।
Callback এর ব্যবহার কেন প্রয়োজন?
- Dynamic Behavior: যখন মক অবজেক্টের আচরণ একটি ইনপুটের উপর নির্ভর করে এবং এটি পুনরাবৃত্তি বা বিভিন্ন পরিস্থিতিতে পরিবর্তিত হতে পারে।
- Stateful Mocks: আপনি যখন মক অবজেক্টে একটি বিশেষ অবস্থা তৈরি করতে চান এবং সেই অনুযায়ী বিভিন্ন আউটপুট চান।
- Complex Scenarios: যখন মক অবজেক্টের আউটপুটের জন্য আরও জটিল পরিস্থিতি তৈরি করতে চান, তখন Callback অত্যন্ত কার্যকরী।
EasyMock এ Callback এর মাধ্যমে Behavior কাস্টমাইজ করার উদাহরণ
ধরা যাক, আমাদের একটি PaymentService ক্লাস রয়েছে, যেখানে একটি পেমেন্ট প্রক্রিয়া করা হয় এবং এই প্রক্রিয়াটি বিভিন্ন পেমেন্ট টাইপের উপর নির্ভর করে।
1. PaymentService Interface:
public interface PaymentService {
String processPayment(double amount);
}
2. EasyMock Example with Callback:
import static org.easymock.EasyMock.*;
public class EasyMockCallbackExample {
public static void main(String[] args) {
// Create a mock object of the PaymentService interface
PaymentService paymentServiceMock = createMock(PaymentService.class);
// Set up behavior using callback
expect(paymentServiceMock.processPayment(100.0)).andAnswer(() -> {
// Custom logic to handle payment amount
double amount = 100.0;
return "Payment of " + amount + " processed successfully.";
});
expect(paymentServiceMock.processPayment(200.0)).andAnswer(() -> {
// Custom logic for a different payment amount
double amount = 200.0;
return "Payment of " + amount + " processed successfully with a discount.";
});
// Activate the mock
replay(paymentServiceMock);
// Test the behavior with different inputs
System.out.println(paymentServiceMock.processPayment(100.0)); // Should process payment of 100
System.out.println(paymentServiceMock.processPayment(200.0)); // Should process payment of 200
// Verify the expectations
verify(paymentServiceMock);
}
}
Output:
Payment of 100.0 processed successfully.
Payment of 200.0 processed successfully with a discount.
Explanation:
andAnswer(): এখানেandAnswer()মেথড ব্যবহার করা হয়েছে, যা একটি Callback মেথডকে একটি lambda expression বা anonymous method দিয়ে ডিফাইন করে। এই মেথডটি রানটাইমের সময় processPayment() মেথডে নির্দিষ্ট ইনপুটের জন্য কাস্টম লজিক প্রদান করছে।- প্রথমে, যখন পেমেন্টের পরিমাণ
100.0হয়, তখন সাধারণ মেসেজ ফেরত দেয়া হয়। - দ্বিতীয় ক্ষেত্রে,
200.0পেমেন্টের জন্য ডিসকাউন্ট সহ একটি কাস্টম মেসেজ ফেরত দেয়া হয়।
- প্রথমে, যখন পেমেন্টের পরিমাণ
- Custom Logic Inside Callback: এখানে কাস্টম লজিক (যেমন, পেমেন্ট প্রক্রিয়া এবং ডিসকাউন্ট)
andAnswer()মেথডের ভিতরে বাস্তবায়িত হয়েছে, যা ইনপুটের উপর ভিত্তি করে ফলাফল পরিবর্তন করে।
EasyMock Callback ব্যবহার করার উপকারিতা
- Dynamic Behavior: আপনি মক অবজেক্টের আচরণ runtime এর সময় ইনপুটের উপর ভিত্তি করে পরিবর্তন করতে পারেন, যা কাস্টম এবং ডাইনামিক আচরণ তৈরি করতে সাহায্য করে।
- Stateful Behavior: যদি আপনাকে মক অবজেক্টের আউটপুট পরিবর্তনশীল বা পরস্পর সম্পর্কিত কিছু ইনপুটের ভিত্তিতে করতে হয়, তবে Callbacks ব্যবহার খুবই কার্যকরী হতে পারে।
- Complex Scenarios: Callbacks ব্যবহার করে আপনি খুবই জটিল পরিস্থিতি তৈরি করতে পারেন যেখানে মক অবজেক্টের আচরণ একাধিক শর্ত বা ইনপুটের উপর নির্ভরশীল।
- Enhanced Test Flexibility: মক অবজেক্টের আচরণ কাস্টমাইজ করার জন্য andAnswer() খুবই নমনীয় এবং কার্যকরী।
সারাংশ
Callbacks হল EasyMock এর একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে মক অবজেক্টের আচরণ runtime-এ ডাইনামিকভাবে কাস্টমাইজ করার সুযোগ দেয়। andAnswer() মেথডের মাধ্যমে আপনি আর্গুমেন্টের উপর ভিত্তি করে কাস্টম লজিক প্রয়োগ করতে পারেন এবং একটি মেথডের আউটপুট নিয়ন্ত্রণ করতে পারেন। এই পদ্ধতি ব্যবহার করে, আপনি মক অবজেক্টের মাধ্যমে জটিল টেস্ট পরিস্থিতি তৈরি করতে পারেন, যা কোডের নমনীয়তা এবং কার্যকারিতা বাড়ায়।
Read more