EasyMock এর মাধ্যমে mock objects তৈরি এবং ব্যবস্থাপনা করা সহজ। একটি mock object এর আচরণ সঠিকভাবে পরীক্ষার জন্য verification mode ব্যবহার করা হয়, যাতে নিশ্চিত করা যায় যে mock objects এর মেথডগুলো সঠিকভাবে নির্ধারিত সংখ্যায় কল হয়েছে। EasyMock এ, মেথডের কলের সংখ্যা এবং আচরণ যাচাই করার জন্য কিছু verification মেথড ব্যবহার করা হয়।
এই গাইডে, আমরা EasyMock এর মাধ্যমে verification mode এ মেথড কলের সংখ্যা নিশ্চিত করার পদ্ধতি আলোচনা করব, এবং দেখব কীভাবে exactly(), atLeastOnce(), atMost() এবং times() ব্যবহার করে মেথড কল নিশ্চিত করা যায়।
1. Verification Mode এর সাথে Method Call নিশ্চিত করা
EasyMock এর verification mode ব্যবহার করে, আপনি mock object এর মেথডগুলির কলের সংখ্যা এবং আচরণ নিশ্চিত করতে পারেন। এখানে কিছু প্রধান verification মেথডের আলোচনা করা হয়েছে:
- exactly(n): এই মেথডটি নিশ্চিত করে যে নির্দিষ্ট মেথডটি exactly
nবার কল হয়েছে। - atLeastOnce(): এই মেথডটি নিশ্চিত করে যে মেথডটি কমপক্ষে একবার কল হয়েছে।
- atMost(n): এই মেথডটি নিশ্চিত করে যে মেথডটি সর্বোচ্চ
nবার কল হয়েছে। - times(n): এটি নিশ্চিত করে যে মেথডটি
nবার কল হয়েছে।
Example: Verification Mode
ধরা যাক, আমাদের একটি PaymentService ইন্টারফেস রয়েছে, যা processPayment মেথডটি প্রক্রিয়া করে এবং আমাদের টেস্টে আমরা চাই এটি একটি নির্দিষ্ট সংখ্যক বার কল হয়েছে কিনা তা নিশ্চিত করতে।
import static org.easymock.EasyMock.*;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
public class PaymentServiceTest {
private PaymentService mockPaymentService;
@Before
public void setUp() {
// Mock object তৈরি
mockPaymentService = createMock(PaymentService.class);
}
@Test
public void testProcessPayment_ExactlyOnce() {
// mock object এর প্রত্যাশিত আচরণ নির্ধারণ
expect(mockPaymentService.processPayment(100.0)).andReturn(true);
// Mock সক্রিয় করা
replay(mockPaymentService);
// মেথড কল
mockPaymentService.processPayment(100.0);
// verify() মেথডে নিশ্চিত করা যে এটি একবার কল হয়েছে
verify(mockPaymentService); // exactly once
}
@Test
public void testProcessPayment_AtLeastOnce() {
// mock object এর প্রত্যাশিত আচরণ নির্ধারণ
expect(mockPaymentService.processPayment(100.0)).andReturn(true);
// Mock সক্রিয় করা
replay(mockPaymentService);
// মেথড কল (কমপক্ষে একবার কল করা হবে)
mockPaymentService.processPayment(100.0);
mockPaymentService.processPayment(100.0);
// verify() মেথডে নিশ্চিত করা যে এটি কমপক্ষে একবার কল হয়েছে
verify(mockPaymentService); // at least once
}
@Test
public void testProcessPayment_AtMost() {
// mock object এর প্রত্যাশিত আচরণ নির্ধারণ
expect(mockPaymentService.processPayment(100.0)).andReturn(true);
// Mock সক্রিয় করা
replay(mockPaymentService);
// মেথড কল (সর্বাধিক একবার কল করা হবে)
mockPaymentService.processPayment(100.0);
mockPaymentService.processPayment(100.0);
// verify() মেথডে নিশ্চিত করা যে এটি সর্বাধিক একবার কল হয়েছে
verify(mockPaymentService); // at most once
}
@Test
public void testProcessPayment_Times() {
// mock object এর প্রত্যাশিত আচরণ নির্ধারণ
expect(mockPaymentService.processPayment(100.0)).andReturn(true);
// Mock সক্রিয় করা
replay(mockPaymentService);
// মেথড কল (একবার)
mockPaymentService.processPayment(100.0);
// verify() মেথডে নিশ্চিত করা যে এটি একবার কল হয়েছে
verify(mockPaymentService); // called once
}
}
Explanation:
- exactly(n):
verify(mockPaymentService)ব্যবহার করা হয়েছে যেখানে নিশ্চিত করা হয়েছে যে processPayment(100.0) একবার কল হয়েছে।
- atLeastOnce():
- এখানে processPayment মেথডটি কমপক্ষে একবার কল করা হয়েছে, এবং verify(mockPaymentService) এর মাধ্যমে নিশ্চিত করা হয়েছে যে এটি একাধিকবার কল করা হয়েছে।
- atMost(n):
- এখানে processPayment মেথডটি সর্বোচ্চ একবার কল করা হয়েছে এবং
verify(mockPaymentService)এর মাধ্যমে নিশ্চিত করা হয়েছে যে এটি একবারের বেশি কল হয়নি।
- এখানে processPayment মেথডটি সর্বোচ্চ একবার কল করা হয়েছে এবং
- times(n):
- এখানে processPayment(100.0) মেথডটি একবার কল হওয়া নিশ্চিত করা হয়েছে।
2. Verification Mode এর ব্যবহার:
exactly(n)
exactly(n) ব্যবহার করা হয় যখন আপনি নিশ্চিত করতে চান যে একটি mock মেথড নির্দিষ্ট সংখ্যক বার কল হয়েছে।
expect(mockPaymentService.processPayment(100.0)).andReturn(true);
replay(mockPaymentService);
mockPaymentService.processPayment(100.0);
verify(mockPaymentService); // Exactly once
atLeastOnce()
atLeastOnce() ব্যবহার করা হয় যখন আপনি নিশ্চিত করতে চান যে একটি mock মেথড কমপক্ষে একবার কল হয়েছে। এটি যখন আপনার কাছে একাধিক কল আসবে এবং আপনি চান যে মেথডটি অন্তত একবার কল হোক, তখন এটি ব্যবহার করা হয়।
expect(mockPaymentService.processPayment(100.0)).andReturn(true);
replay(mockPaymentService);
mockPaymentService.processPayment(100.0);
mockPaymentService.processPayment(100.0);
verify(mockPaymentService); // At least once
atMost(n)
atMost(n) ব্যবহার করা হয় যখন আপনি নিশ্চিত করতে চান যে একটি mock মেথড সর্বাধিক n বার কল হয়েছে।
expect(mockPaymentService.processPayment(100.0)).andReturn(true);
replay(mockPaymentService);
mockPaymentService.processPayment(100.0);
mockPaymentService.processPayment(100.0);
verify(mockPaymentService); // At most once
times(n)
times(n) ব্যবহার করা হয় যখন আপনি নিশ্চিত করতে চান যে একটি mock মেথড n বার কল হয়েছে।
expect(mockPaymentService.processPayment(100.0)).andReturn(true);
replay(mockPaymentService);
mockPaymentService.processPayment(100.0);
verify(mockPaymentService); // Called exactly once
EasyMock এর verification mode এর মাধ্যমে আপনি mock objects-এর মেথডগুলো সঠিকভাবে কতবার কল হয়েছে তা নিশ্চিত করতে পারেন। আপনি exactly(n), atLeastOnce(), atMost(n), এবং times(n) মেথডের মাধ্যমে mock method calls এর সংখ্যা যাচাই করতে পারেন। এই verification techniques আপনাকে unit tests এর কার্যকারিতা নিশ্চিত করতে সাহায্য করবে এবং আপনার কোডের সঠিকতা ও নির্ভুলতা পরীক্ষা করতে সুবিধা দিবে।
Read more