EasyMock.createMock() এবং EasyMock.createNiceMock() কি?
EasyMock.createMock() এবং EasyMock.createNiceMock() উভয়ই EasyMock লাইব্রেরির মেথড, যা মক অবজেক্ট তৈরি করতে ব্যবহৃত হয়। মক অবজেক্ট হলো এমন একটি অবজেক্ট যা আসল অবজেক্টের মতো আচরণ করে, তবে এতে কিছু নির্দিষ্ট আচরণ, যেমন মেথড কল, নির্ধারণ করা হয় এবং পরীক্ষা করা হয়।
- EasyMock.createMock(): এটি একটি সাধারণ মক অবজেক্ট তৈরি করে, যা শুধুমাত্র পূর্বনির্ধারিত আচরণ বা প্রত্যাশিত ফলাফল (expectations) অনুসরণ করে।
- EasyMock.createNiceMock(): এটি একটি "nice" মক অবজেক্ট তৈরি করে। এর মানে হল যে, যদি মক অবজেক্টে কোন মেথড কল করা হয় যা পূর্বে প্রত্যাশিত হয়নি, তবে এটি একটি ডিফল্ট ভ্যালু প্রদান করবে (যেমন
nullবা0), এবং এর মাধ্যমে কোনোUnexpectedMethodCallExceptionতৈরি হবে না। এটি সাধারণত সেই সময় ব্যবহৃত হয় যখন আপনি কিছু মক অবজেক্টের জন্য মক আপডেট চান কিন্তু আপনি সব মেথড কলের জন্য প্রত্যাশিত আচরণ তৈরি করতে চান না।
1. EasyMock.createMock()
EasyMock.createMock() মেথডটি একটি মক অবজেক্ট তৈরি করে, যার সাথে আপনি expect() মেথড ব্যবহার করে কিছু নির্দিষ্ট আচরণ বা প্রত্যাশা সেট করতে পারেন। এটি শুধুমাত্র সেই মেথডগুলিকে অনুমোদন করে যেগুলি আপনি পূর্বে প্রত্যাশিত করেছেন, এবং অন্য কোন মেথড কল হলে এটি একটি UnexpectedMethodCallException ছুড়ে দেয়।
উদাহরণ:
import org.easymock.EasyMock;
import org.junit.Test;
import static org.junit.Assert.*;
public class EasyMockExampleTest {
public interface Service {
String greet(String name);
String farewell(String name);
}
@Test
public void testCreateMock() {
// Creating a mock object using createMock()
Service serviceMock = EasyMock.createMock(Service.class);
// Setting up expectations
EasyMock.expect(serviceMock.greet("John")).andReturn("Hello, John!");
EasyMock.expect(serviceMock.farewell("John")).andReturn("Goodbye, John!");
// Activating the mock
EasyMock.replay(serviceMock);
// Test the mock behavior
String greetResult = serviceMock.greet("John");
String farewellResult = serviceMock.farewell("John");
// Verifying the results
assertEquals("Hello, John!", greetResult);
assertEquals("Goodbye, John!", farewellResult);
// Verifying that the mock was used as expected
EasyMock.verify(serviceMock);
}
}
ব্যাখ্যা:
- EasyMock.createMock(Service.class): এটি
Serviceইন্টারফেসের একটি মক অবজেক্ট তৈরি করেছে। - EasyMock.expect(): এটি নির্ধারণ করে যে
greet("John")এবংfarewell("John")মেথড কলগুলির প্রত্যাশিত ফলাফল কী হবে। - EasyMock.replay(): এটি মক অবজেক্টে সেট করা প্রত্যাশা সক্রিয় করে।
- EasyMock.verify(): এটি যাচাই করে যে মক অবজেক্টটির প্রত্যাশিত মেথড কলগুলি সঠিকভাবে হয়েছে কিনা।
2. EasyMock.createNiceMock()
EasyMock.createNiceMock() মেথডটি একটি "nice" মক অবজেক্ট তৈরি করে। এর বৈশিষ্ট্য হল, যদি কোনো মেথড কল করা হয় যেটি পূর্বে প্রত্যাশিত হয় না, তবে এটি ডিফল্ট মান ফেরত দেয় (যেমন null, 0, false ইত্যাদি), এবং কোন ত্রুটি ছাড়াই এটি চলে।
এটি সাধারণত তখন ব্যবহৃত হয় যখন আপনি কিছু মক অবজেক্টের জন্য আচরণ নির্ধারণ করতে চান, তবে সব মেথডের জন্য প্রত্যাশা নির্ধারণ করতে চান না।
উদাহরণ:
import org.easymock.EasyMock;
import org.junit.Test;
import static org.junit.Assert.*;
public class EasyMockExampleTest {
public interface Service {
String greet(String name);
String farewell(String name);
}
@Test
public void testCreateNiceMock() {
// Creating a nice mock object using createNiceMock()
Service serviceMock = EasyMock.createNiceMock(Service.class);
// Setting up expectations for greet method
EasyMock.expect(serviceMock.greet("John")).andReturn("Hello, John!");
// Activating the mock
EasyMock.replay(serviceMock);
// Test the mock behavior
String greetResult = serviceMock.greet("John");
String farewellResult = serviceMock.farewell("John"); // No expectation set for this method
// Verifying the results
assertEquals("Hello, John!", greetResult);
assertNull(farewellResult); // No expectation set, should return null (default behavior)
// Verifying that the mock was used as expected
EasyMock.verify(serviceMock);
}
}
ব্যাখ্যা:
- EasyMock.createNiceMock(Service.class): এটি
Serviceইন্টারফেসের একটি nice মক অবজেক্ট তৈরি করেছে। - EasyMock.expect(): এটি
greet("John")মেথডের জন্য প্রত্যাশা নির্ধারণ করেছে। farewell("John")মেথডের জন্য কোনো প্রত্যাশা নির্ধারণ করা হয়নি, তাই এটিnullফেরত দিবে।- EasyMock.replay(): এটি মক অবজেক্টের আচরণ সক্রিয় করে।
- EasyMock.verify(): এটি যাচাই করে যে মক অবজেক্টটি সঠিকভাবে ব্যবহৃত হয়েছে কিনা।
EasyMock.createMock() এবং EasyMock.createNiceMock() এর মধ্যে পার্থক্য:
| Feature | EasyMock.createMock() | EasyMock.createNiceMock() |
|---|---|---|
| Default Behavior | এক্সপেকটেড মেথড কল ছাড়া কোনো কল হলে UnexpectedMethodCallException ঘটে। | এক্সপেকটেড মেথড কল ছাড়া কল হলে ডিফল্ট মান প্রদান করা হয় (যেমন null, 0, false) |
| Use Case | যখন আপনি সকল মেথড কলের জন্য প্রত্যাশা নির্ধারণ করতে চান। | যখন কিছু মেথডের জন্য প্রত্যাশা নির্ধারণ না করে ডিফল্ট মান দরকার। |
| Error Handling | মক অবজেক্টে কোনো অপ্রত্যাশিত কল হলে ত্রুটি হবে। | অপ্রত্যাশিত কলের জন্য ত্রুটি না দিয়ে ডিফল্ট মান প্রদান করবে। |
সারাংশ
- EasyMock.createMock() এবং EasyMock.createNiceMock() দুটি মক অবজেক্ট তৈরি করার জন্য ব্যবহৃত হয়।
- createMock() ব্যবহার করলে আপনি শুধু নির্দিষ্ট মেথডগুলির জন্য প্রত্যাশা তৈরি করতে পারেন এবং অন্য কোনো অপ্রত্যাশিত মেথড কল হলে
UnexpectedMethodCallExceptionঘটবে। - createNiceMock() ব্যবহার করলে, আপনি অপ্রত্যাশিত মেথড কলগুলির জন্য ডিফল্ট মান (যেমন
null,false,0) ফেরত পাবেন এবং এতে কোনো ত্রুটি ঘটবে না।
এটি মূলত টেস্টিং পরিস্থিতির উপর নির্ভর করে, আপনি কোন ধরনের মক অবজেক্ট প্রয়োজন তা অনুযায়ী এগুলির মধ্যে সঠিকটি নির্বাচন করবেন।
Read more