EasyMock এর Record Mode কি?
EasyMock এর Record Mode হল এমন একটি মোড যেখানে আপনি মক অবজেক্টের behavior (আচরণ) বা expectations (প্রত্যাশা) ডিফাইন করতে পারেন। যখন আপনি expect() মেথড ব্যবহার করেন, তখন আপনি যেটি প্রত্যাশা করছেন, সেটি Record Mode এ সুনির্দিষ্ট করা হয়। এর মানে হল যে আপনি মক অবজেক্টের মেথড কলগুলি আগে থেকেই জানিয়ে দেন যে কোন ইনপুট প্রদান করলে কেমন আউটপুট আশা করা হবে। এরপর এই প্রত্যাশিত আচরণগুলি replay mode-এ যাচাই করা হয়।
EasyMock এর Record Mode এবং Replay Mode এর মধ্যে পার্থক্য:
- Record Mode: এটি expect() মেথড ব্যবহার করে মক অবজেক্টের আচরণ (behavior) নির্ধারণ করা হয়। যখন আপনি মক অবজেক্টের মেথড কল করেন, তখন আপনি কি আশা করছেন, তা এখানে ডিফাইন করা হয়।
- Replay Mode: যখন আপনি মক অবজেক্টে মেথড কল করেন, তখন এটি আগেরভাবে ডিফাইন করা আচরণ অনুসরণ করে এবং আপনি নিশ্চিত হতে পারেন যে আপনার কোড প্রত্যাশিতভাবে কাজ করছে।
Record Mode এ Behavior ডিফাইন করার উদাহরণ
ধরা যাক, আপনার একটি Service ইন্টারফেস রয়েছে, যার মধ্যে দুটি মেথড greet(String name) এবং farewell(String name) রয়েছে। এই মেথডগুলির জন্য behavior record mode-এ ডিফাইন করতে হবে।
Step 1: Service Interface
public interface Service {
String greet(String name);
String farewell(String name);
}
Step 2: Test Class with Record Mode Behavior
এখন, আপনি EasyMock ব্যবহার করে মক অবজেক্ট তৈরি করবেন এবং greet() এবং farewell() মেথডের জন্য behavior ডিফাইন করবেন।
import org.easymock.EasyMock;
import org.junit.Test;
import static org.junit.Assert.*;
public class EasyMockRecordModeTest {
@Test
public void testServiceBehaviorInRecordMode() {
// Creating a mock object of Service using EasyMock
Service serviceMock = EasyMock.createMock(Service.class);
// Setting up expectations in Record Mode (defining behavior)
EasyMock.expect(serviceMock.greet("John")).andReturn("Hello, John!"); // Behavior for greet method
EasyMock.expect(serviceMock.farewell("John")).andReturn("Goodbye, John!"); // Behavior for farewell method
// Activating the mock (moving to Replay Mode)
EasyMock.replay(serviceMock);
// Calling the methods and checking the expected results
String greetResult = serviceMock.greet("John");
String farewellResult = serviceMock.farewell("John");
// Verifying the results
assertEquals("Hello, John!", greetResult);
assertEquals("Goodbye, John!", farewellResult);
// Verifying that the expected methods were called
EasyMock.verify(serviceMock);
}
}
ব্যাখ্যা:
- EasyMock.createMock(Service.class): এটি
Serviceইন্টারফেসের একটি মক অবজেক্ট তৈরি করে। - EasyMock.expect(): এটি
greet("John")এবংfarewell("John")মেথডের জন্য প্রত্যাশা (behavior) নির্ধারণ করে। - EasyMock.replay(): এটি মক অবজেক্টে record mode থেকে replay mode-এ চলে আসে এবং মক অবজেক্টের আচরণ কার্যকর হয়।
- assertEquals(): এটি যাচাই করে যে মক অবজেক্টের মেথড কলের ফলাফল প্রত্যাশিত আউটপুটের সাথে মিলে।
- EasyMock.verify(): এটি নিশ্চিত করে যে প্রত্যাশিত মেথডগুলো সঠিকভাবে মক অবজেক্টে কল হয়েছে।
Multiple Expectations সেট করা
আপনি একাধিক expectations (অথবা behavior) একটি মক অবজেক্টের জন্য সেট করতে পারেন, যাতে একাধিক মেথড কলের প্রত্যাশা তৈরি করা যায়। উদাহরণস্বরূপ:
@Test
public void testMultipleExpectations() {
// Creating a mock object of Service
Service serviceMock = EasyMock.createMock(Service.class);
// Setting multiple expectations (behaviors) in Record Mode
EasyMock.expect(serviceMock.greet("Alice")).andReturn("Hello, Alice!");
EasyMock.expect(serviceMock.farewell("Alice")).andReturn("Goodbye, Alice!");
EasyMock.expect(serviceMock.greet("Bob")).andReturn("Hello, Bob!");
// Activating the mock (moving to Replay Mode)
EasyMock.replay(serviceMock);
// Testing the mock behavior
String greetAlice = serviceMock.greet("Alice");
String farewellAlice = serviceMock.farewell("Alice");
String greetBob = serviceMock.greet("Bob");
// Verifying the results
assertEquals("Hello, Alice!", greetAlice);
assertEquals("Goodbye, Alice!", farewellAlice);
assertEquals("Hello, Bob!", greetBob);
// Verifying that the expected methods were called
EasyMock.verify(serviceMock);
}
ব্যাখ্যা:
- এখানে আমরা Alice এবং Bob এর জন্য আলাদা আলাদা greet() এবং farewell() মেথডের জন্য প্রত্যাশা তৈরি করেছি।
- Multiple expectations তৈরি করার মাধ্যমে, আপনি বিভিন্ন ইনপুটের জন্য পৃথক পৃথক আচরণ নির্ধারণ করতে পারেন।
Exception Throwing in Record Mode
আপনি যদি কোনো মেথডে exception থ্রো করতে চান, তবে expect() এবং andThrow() মেথড ব্যবহার করতে পারেন।
উদাহরণ: Exception থ্রো করা
@Test(expected = IOException.class)
public void testExceptionInRecordMode() throws IOException {
// Creating a mock object of Service
Service serviceMock = EasyMock.createMock(Service.class);
// Setting up the expectation to throw an exception
EasyMock.expect(serviceMock.greet("Alice")).andThrow(new IOException("Error in greeting"));
// Activating the mock
EasyMock.replay(serviceMock);
// Calling the method to check if the exception is thrown
serviceMock.greet("Alice");
// Verifying that the expected methods were called
EasyMock.verify(serviceMock);
}
ব্যাখ্যা:
- andThrow(): এটি নির্ধারণ করে যে যখন
greet("Alice")মেথড কল হবে, তখন একটি IOException থ্রো হবে। - @Test(expected = IOException.class): JUnit এ expected exception নির্ধারণ করে, যাতে পরীক্ষার সময় IOException আসলেই থ্রো হয়েছে কিনা তা যাচাই করা যায়।
সারাংশ
EasyMock এর Record Mode হল সেই মোড যেখানে আপনি মক অবজেক্টের expectations বা behavior ডিফাইন করেন। এটি মক অবজেক্টের মেথড কলের জন্য প্রত্যাশিত আউটপুট এবং আচরণ নির্ধারণ করতে সহায়তা করে। expect() এবং andReturn() মেথডের মাধ্যমে আপনি মেথড কলের প্রত্যাশিত ফলাফল নির্ধারণ করতে পারেন, এবং andThrow() ব্যবহার করে আপনি মক অবজেক্ট থেকে exception থ্রো করতে পারেন। এরপর, replay() মোডে এই প্রত্যাশাগুলি যাচাই করা হয় এবং verify() দিয়ে নিশ্চিত করা হয় যে সঠিক মেথড কল হয়েছে।
Read more