EasyMock হল একটি লাইব্রেরি যা mock objects তৈরি করার জন্য ব্যবহৃত হয়, বিশেষত unit testing তে। এটি JUnit বা TestNG টেস্টিং ফ্রেমওয়ার্কের সাথে ব্যবহৃত হয় এবং নির্ভরশীলতা কমিয়ে ইউনিট টেস্টগুলিকে আরও কার্যকরী করে তোলে। EasyMock এর API আপনাকে মক অবজেক্ট তৈরি, স্টাবিং, ভেরিফিকেশন, এবং অন্যান্য টেস্টিং কাজ করতে সহায়তা করে।
এই টিউটোরিয়ালে, আমরা EasyMock API এবং এর প্রধান ক্লাসসমূহ সম্পর্কে আলোচনা করব।
1. EasyMock এর প্রধান বৈশিষ্ট্য
EasyMock এর মাধ্যমে আপনি:
- Mock objects তৈরি করতে পারবেন।
- মক অবজেক্টে method stubbing করতে পারবেন (যে মেথডগুলো পরবর্তীতে নির্দিষ্ট আউটপুট ফেরত দেবে)।
- মক অবজেক্টের method calls যাচাই করতে পারবেন (যতবার একটি মেথড কল করা হয়েছে)।
- Exception handling স্টাবিং করতে পারবেন, অর্থাৎ মক অবজেক্ট থেকে কোনও exception ফেলে দেয়ার মতো আচরণ সিমুলেট করতে পারবেন।
2. EasyMock এর প্রধান ক্লাসসমূহ
EasyMock API তে কিছু প্রধান ক্লাস রয়েছে, যেগুলি মক অবজেক্ট তৈরি এবং পরিচালনা করার জন্য ব্যবহৃত হয়। নিচে তাদের সংক্ষিপ্ত পরিচিতি দেওয়া হলো:
2.1 EasyMock (Core Class)
- EasyMock হল মূল ক্লাস যা মক অবজেক্ট তৈরি এবং মেথড কল করার জন্য ব্যবহৃত হয়। এই ক্লাসটি mocking, replay, verify, এবং expect এর মতো ফাংশনালিটি সরবরাহ করে।
কিছু গুরুত্বপূর্ণ মেথড:
createMock(Class<T> toMock): একটি মক অবজেক্ট তৈরি করে।expect(T methodCall): মক অবজেক্টের মেথড কলের জন্য স্টাবিং করে।replay(Object... mocks): মক অবজেক্টগুলির মেথড কল প্রস্তুত করে, যাতে টেস্ট চালানোর সময় এই মেথডগুলো কাজ করতে পারে।verify(Object... mocks): যাচাই করে যে মক অবজেক্টের মেথডগুলো সঠিকভাবে কল হয়েছে কি না।
উদাহরণ:
import static org.easymock.EasyMock.*;
public class EasyMockExample {
public static void main(String[] args) {
// Create a mock object of List
List<String> mockList = createMock(List.class);
// Stubbing the method behavior
expect(mockList.size()).andReturn(5);
expect(mockList.get(0)).andReturn("Hello");
// Activate the mock
replay(mockList);
// Test the mocked methods
System.out.println("Size of list: " + mockList.size()); // Should return 5
System.out.println("Element at index 0: " + mockList.get(0)); // Should return "Hello"
// Verify method interactions
verify(mockList);
}
}
2.2 MockControl (Deprecated)
- MockControl ক্লাসটি পুরানো ভার্সনের একটি ক্লাস ছিল, যা EasyMock 3.x তে ডিপ্রিকেটেড হয়েছে।
- এটি পূর্বের EasyMock ভার্সনগুলিতে মক অবজেক্টের আচরণ নিয়ন্ত্রণ করতে ব্যবহৃত হতো, কিন্তু এখন এটি createMock() এর মাধ্যমে সহজভাবে করা যায়।
2.3 IMocksControl
- IMocksControl একটি ইন্টারফেস যা মক অবজেক্টগুলির জন্য আচরণ নিয়ন্ত্রণ করে, যেমন stubbing এবং verification এর কাজগুলিকে একত্রে পরিচালনা করে।
- এটি MockControl এর একটি উন্নত সংস্করণ যা আরও উন্নত ফিচার সরবরাহ করে এবং মক অবজেক্টের নিয়ন্ত্রণ আরও সহজ করে।
2.4 Mock Objects (Mock Class)
- Mock objects হল জেনেরিক অবজেক্ট যা EasyMock এর মাধ্যমে তৈরি হয়। এই অবজেক্টগুলো replay() এবং verify() এর মতো ফাংশনালিটি ব্যবহার করে পরীক্ষা করা হয়।
3. EasyMock API এর কিছু গুরুত্বপূর্ণ মেথড
EasyMock এর প্রধান API মেথডগুলো হলো:
- createMock(Class toMock):
- এটি একটি মক অবজেক্ট তৈরি করে যেটি টেস্টে ব্যবহৃত হবে।
- Syntax:
T mockObject = EasyMock.createMock(Class<T> toMock);
- expect(T methodCall):
- এটি মক অবজেক্টের মেথডের জন্য স্টাবিং কনফিগার করে, অর্থাৎ কোন মেথড কী রিটার্ন করবে তা নির্ধারণ করে।
- Syntax:
EasyMock.expect(mockObject.methodCall()).andReturn(returnValue);
- replay(Object... mocks):
- এটি মক অবজেক্টের মেথডগুলো চালানোর জন্য প্রস্তুত করে। মক অবজেক্টের জন্য স্টাবিং করা হলে, এটি পরীক্ষা চলাকালীন সময়ে বাস্তবায়ন করবে।
- Syntax:
EasyMock.replay(mockObject);
- verify(Object... mocks):
- এটি যাচাই করে যে, মক অবজেক্টের মেথডটি সঠিকভাবে কল করা হয়েছে কি না এবং এটি replay() এর পরে কল করা হয়।
- Syntax:
EasyMock.verify(mockObject);
- reset(Object... mocks):
- এটি মক অবজেক্টটি পুনরায় রিসেট করে এবং পুনরায় স্টাবিং এবং রিভিউ করতে প্রস্তুত করে।
- Syntax:
EasyMock.reset(mockObject);
4. Advanced Features in EasyMock API
4.1 Partial Mocking
EasyMock আপনাকে partial mocking করার সুবিধা দেয়, যেখানে আপনি একটি বাস্তব অবজেক্টের শুধুমাত্র নির্দিষ্ট মেথড মক করতে পারেন, বাকী মেথডগুলির আচরণ স্বাভাবিক থাকবে।
List<String> list = createMockBuilder(ArrayList.class)
.addMockedMethod("size")
.createMock();
expect(list.size()).andReturn(10);
replay(list);
4.2 Exception Handling
EasyMock এর মাধ্যমে আপনি মক অবজেক্ট থেকে exception ফেলা বা স্টাবিং করতে পারেন:
expect(mockObject.someMethod()).andThrow(new RuntimeException("Exception message"));
5. EasyMock এর কিছু সুবিধা
- Simple API: EasyMock এর API সহজ এবং সরল, যার মাধ্যমে মক অবজেক্ট তৈরি ও পরিচালনা করা যায়।
- No Need for Real Dependencies: ডাটাবেস, ওয়েব সার্ভিস বা অন্যান্য নির্ভরশীলতা ছাড়াই টেস্টিং করা যায়।
- Behavior Verification: মক অবজেক্টের উপর ইন্টারঅ্যাকশন যাচাই করা যায়, যেমন মেথড কিভাবে এবং কতবার কল হয়েছে।
- Flexible Stubbing: স্টাবিংয়ের মাধ্যমে মক অবজেক্টের মেথডের আচরণ কাস্টমাইজ করা যায়।
6. Conclusion
EasyMock একটি শক্তিশালী টুল যা unit testing এ মক অবজেক্ট তৈরি করার জন্য ব্যবহৃত হয়। এর API এবং মুখ্য ক্লাসসমূহ সহজেই মকিংয়ের কাজ করতে সহায়তা করে এবং কোডের নির্ভরশীলতা হ্রাস করে টেস্টিং কার্যকরী করে। EasyMock এর প্রধান মেথডগুলো যেমন createMock(), expect(), replay(), এবং verify() আপনাকে আপনার টেস্ট কোডে মক অবজেক্ট তৈরি, কনফিগার, এবং যাচাই করতে সহায়ক হয়।
Read more