EasyMock একটি জনপ্রিয় mocking framework যা unit testing তে ব্যবহৃত হয়। এটি টেস্টিংয়ের সময় মক অবজেক্টের আচরণ নির্ধারণ করতে এবং সেই আচরণের উপর ভিত্তি করে verification করতে সাহায্য করে। Exact এবং Range-Based Verification হল সেই ধরনের বৈশিষ্ট্য, যার মাধ্যমে আপনি নিশ্চিত করতে পারেন যে একটি নির্দিষ্ট মেথড কতবার এবং কখন কল হয়েছে।
EasyMock এ verification করার জন্য তিনটি সাধারণ মেথড ব্যবহৃত হয়:
times()atLeast()atMost()
এই মেথডগুলি method call এর সংখ্যা যাচাই করার জন্য ব্যবহার করা হয়, যা আপনার টেস্টের উদ্দেশ্য অনুযায়ী উপযুক্ত হতে পারে।
1. Exact Verification (times())
Exact Verification এর মাধ্যমে আপনি যাচাই করতে পারেন যে একটি নির্দিষ্ট মেথড কতবার কল করা হয়েছে। times() মেথডটি এই যাচাইয়ের জন্য ব্যবহার করা হয়। এটি নিশ্চিত করে যে মক অবজেক্টের নির্দিষ্ট মেথডটি নির্দিষ্ট সংখ্যক বার কল হয়েছে।
1.1. Exact Verification Example (times())
import org.easymock.EasyMock;
import org.junit.Test;
import static org.junit.Assert.*;
class PaymentService {
public void processPayment(int amount) {
System.out.println("Payment of " + amount + " processed.");
}
}
public class ExactVerificationExample {
@Test
public void testExactVerification() {
// Create mock object
PaymentService paymentServiceMock = EasyMock.createMock(PaymentService.class);
// Define the expected behavior
paymentServiceMock.processPayment(100);
EasyMock.expectLastCall().times(2); // Expect processPayment to be called exactly twice
// Activate the mock
EasyMock.replay(paymentServiceMock);
// Use the mock
paymentServiceMock.processPayment(100);
paymentServiceMock.processPayment(100);
// Verify that the mock method was called exactly twice
EasyMock.verify(paymentServiceMock);
}
}
ব্যাখ্যা:
expectLastCall().times(2): এখানেprocessPayment(100)মেথডটি দ্বিবার কল হওয়ার জন্য নির্ধারণ করা হয়েছে। যদি এটি একবার বা তিনবার কল হয়, তবে টেস্টটি ব্যর্থ হবে।verify(paymentServiceMock): এটি যাচাই করে যে মক অবজেক্টের processPayment() মেথডটি নির্ধারিত সংখ্যক বার কল হয়েছে।
আউটপুট:
Payment of 100 processed.
Payment of 100 processed.
2. Range-Based Verification
Range-Based Verification এর মাধ্যমে আপনি নিশ্চিত করতে পারেন যে একটি নির্দিষ্ট মেথড কতবার কল হয়েছে, এবং একটি নির্দিষ্ট পরিসীমা (range) এর মধ্যে এটি হওয়া উচিত। এতে তিনটি মেথড ব্যবহৃত হয়:
atLeast(): মেথডটি কমপক্ষে একটি নির্দিষ্ট সংখ্যক বার কল হওয়া উচিত।atMost(): মেথডটি সর্বাধিক একটি নির্দিষ্ট সংখ্যক বার কল হওয়া উচিত।times(): নির্দিষ্ট সংখ্যক বার কল হওয়া উচিত (যেমন পূর্বের উদাহরণে)।
2.1. atLeast() Example
import org.easymock.EasyMock;
import org.junit.Test;
import static org.junit.Assert.*;
public class AtLeastVerificationExample {
@Test
public void testAtLeastVerification() {
// Create mock object
PaymentService paymentServiceMock = EasyMock.createMock(PaymentService.class);
// Define the expected behavior
paymentServiceMock.processPayment(100);
EasyMock.expectLastCall().atLeastOnce(); // Expect processPayment to be called at least once
// Activate the mock
EasyMock.replay(paymentServiceMock);
// Use the mock
paymentServiceMock.processPayment(100);
paymentServiceMock.processPayment(100); // Call it multiple times
// Verify that the mock method was called at least once
EasyMock.verify(paymentServiceMock);
}
}
ব্যাখ্যা:
expectLastCall().atLeastOnce(): এটি নিশ্চিত করে যেprocessPayment(100)মেথডটি অন্তত একবার কল হয়েছে, তবে এটি আরো বেশি বারও হতে পারে।
আউটপুট:
Payment of 100 processed.
Payment of 100 processed.
2.2. atMost() Example
import org.easymock.EasyMock;
import org.junit.Test;
import static org.junit.Assert.*;
public class AtMostVerificationExample {
@Test
public void testAtMostVerification() {
// Create mock object
PaymentService paymentServiceMock = EasyMock.createMock(PaymentService.class);
// Define the expected behavior
paymentServiceMock.processPayment(100);
EasyMock.expectLastCall().atMost(3); // Expect processPayment to be called at most 3 times
// Activate the mock
EasyMock.replay(paymentServiceMock);
// Use the mock
paymentServiceMock.processPayment(100);
paymentServiceMock.processPayment(100);
paymentServiceMock.processPayment(100); // Call it three times
// Verify that the mock method was called at most 3 times
EasyMock.verify(paymentServiceMock);
}
}
ব্যাখ্যা:
expectLastCall().atMost(3): এটি নিশ্চিত করে যেprocessPayment(100)মেথডটি সর্বোচ্চ ৩ বার কল হয়েছে, কিন্তু তার বেশি নয়। যদি এটি ৪ বার কল হয়, তবে টেস্টটি ব্যর্থ হবে।
আউটপুট:
Payment of 100 processed.
Payment of 100 processed.
Payment of 100 processed.
3. Combined Example (times(), atLeast(), atMost())
এখন আমরা times(), atLeast(), এবং atMost() একসঙ্গে ব্যবহার করে একটি উদাহরণ দেখব:
import org.easymock.EasyMock;
import org.junit.Test;
import static org.junit.Assert.*;
public class CombinedVerificationExample {
@Test
public void testCombinedVerification() {
// Create mock object
PaymentService paymentServiceMock = EasyMock.createMock(PaymentService.class);
// Define the expected behavior
paymentServiceMock.processPayment(100);
EasyMock.expectLastCall().times(2); // Expect processPayment to be called exactly twice
paymentServiceMock.processPayment(200);
EasyMock.expectLastCall().atLeastOnce(); // Expect processPayment to be called at least once with amount 200
paymentServiceMock.processPayment(300);
EasyMock.expectLastCall().atMost(3); // Expect processPayment to be called at most 3 times with amount 300
// Activate the mock
EasyMock.replay(paymentServiceMock);
// Using the mock
paymentServiceMock.processPayment(100);
paymentServiceMock.processPayment(100);
paymentServiceMock.processPayment(200);
paymentServiceMock.processPayment(300);
paymentServiceMock.processPayment(300);
// Verify that the mock methods were called the expected number of times
EasyMock.verify(paymentServiceMock);
}
}
ব্যাখ্যা:
times(2): এটি নিশ্চিত করে যেprocessPayment(100)মেথডটি ঠিক দুইবার কল হয়েছে।atLeastOnce(): এটি নিশ্চিত করে যেprocessPayment(200)কমপক্ষে একবার কল হয়েছে।atMost(3): এটি নিশ্চিত করে যেprocessPayment(300)সর্বোচ্চ তিনবার কল হয়েছে।
আউটপুট:
Payment of 100 processed.
Payment of 100 processed.
Payment of 200 processed.
Payment of 300 processed.
Payment of 300 processed.
EasyMock এর Exact এবং Range-Based Verification (times(), atLeast(), atMost()) এর মাধ্যমে আপনি মক অবজেক্টের আচরণ এবং মেথড কলের সংখ্যা যাচাই করতে পারেন। এটি নিশ্চিত করতে সহায়ক যে, একটি নির্দিষ্ট মেথড কতবার কল হয়েছে এবং তা আপনার টেস্টের উদ্দেশ্যের সাথে মেলে কিনা।
- times(): নির্দিষ্ট সংখ্যক বার কল হওয়া উচিত।
- atLeast(): কমপক্ষে একটি নির্দিষ্ট সংখ্যক বার কল হওয়া উচিত।
- atMost(): সর্বোচ্চ একটি নির্দিষ্ট সংখ্যক বার কল হওয়া উচিত।
এই বৈশিষ্ট্যগুলি ব্যবহার করে আপনি মক অবজেক্টের আচরণ আরও নির্ভুলভাবে যাচাই করতে পারবেন, যা unit testing এর একটি গুরুত্বপূর্ণ অংশ।
Read more