EasyMock এর partialMockBuilder() একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে partial mocks তৈরি করতে সাহায্য করে। Partial Mocking এর মাধ্যমে, আপনি একটি ক্লাসের কিছু মেথড মক করতে পারেন, তবে কিছু মেথডকে আসল অবস্থায় রেখে দিতে পারেন। এটি বিশেষভাবে উপকারী হয় যখন আপনি একটি ক্লাসের কিছু নির্দিষ্ট আচরণ পরীক্ষা করতে চান, কিন্তু ক্লাসের বাকি অংশের আচরণ পরিবর্তন করতে চান না। এই প্যাটার্নটি সাধারণত তখন ব্যবহার করা হয় যখন আপনি ক্লাসের আসল অবস্থা বা কার্যকারিতা কিছু অংশে পরীক্ষা করতে চান এবং বাকি অংশের মক আচরণ কন্ট্রোল করতে চান।
Partial Mocking কী?
Partial Mocking এর মাধ্যমে আপনি একটি ক্লাসের নির্দিষ্ট মেথডকে মক করেন, কিন্তু বাকি মেথডগুলি আসল অবস্থায় রেখে দেন। এটি বিশেষভাবে তখন ব্যবহার হয় যখন আপনি একটি ক্লাসের কিছু আচরণ মক করতে চান, কিন্তু এর কিছু ফাংশন বা মেথডের আসল আচরণ বজায় রাখতে চান। EasyMock.partialMockBuilder() আপনাকে একটি partial mock অবজেক্ট তৈরি করার সুযোগ দেয়।
EasyMock.partialMockBuilder() এর বৈশিষ্ট্য:
- Partial Mock তৈরি করতে সক্ষম।
- নির্দিষ্ট মেথডগুলো মক করার সুযোগ দেয়, কিন্তু বাকি মেথডগুলির আসল কার্যকারিতা বজায় থাকে।
- মূলত, spy pattern এর মতো কাজ করে, যেখানে কিছু মেথডের আচরণ পরিবর্তন করা হয় এবং বাকি মেথড আসল থাকে।
partialMockBuilder() এর উদাহরণ:
ধরা যাক, আমাদের একটি BankAccount ক্লাস রয়েছে, যার একটি withdraw() মেথড এবং একটি deposit() মেথড রয়েছে। আমরা withdraw() মেথডটি মক করতে চাই, কিন্তু deposit() মেথডের আসল আচরণ বজায় রাখতে চাই। এর জন্য আমরা partialMockBuilder() ব্যবহার করব।
1. BankAccount Class
public class BankAccount {
private double balance;
public BankAccount(double initialBalance) {
this.balance = initialBalance;
}
public double getBalance() {
return balance;
}
public void deposit(double amount) {
balance += amount;
}
public void withdraw(double amount) {
if (amount > balance) {
throw new IllegalArgumentException("Insufficient funds");
}
balance -= amount;
}
}
2. EasyMock Test Case with partialMockBuilder()
import static org.easymock.EasyMock.*;
import org.junit.Test;
import static org.junit.Assert.*;
public class BankAccountTest {
@Test
public void testPartialMock() {
// Create a partial mock for BankAccount
BankAccount bankAccount = new BankAccount(1000);
// Create a partial mock using EasyMock.partialMockBuilder()
BankAccount partialMock = partialMockBuilder(BankAccount.class)
.addMockedMethod("withdraw") // Mock the withdraw method
.createMock();
// Set expectations for the mocked method
partialMock.deposit(500);
expectLastCall().times(1); // Expect the deposit method to be called once
partialMock.withdraw(100); // We don't need to define behavior for withdraw
replay(partialMock); // Switch the mock to replay mode
// Call the methods
partialMock.deposit(500);
partialMock.withdraw(100);
// Verify the behavior
assertEquals(1500, partialMock.getBalance(), 0.01); // deposit should work as expected
verify(partialMock); // Verify that the mocked methods were called correctly
}
}
ব্যাখ্যা:
- partialMockBuilder(BankAccount.class): এখানে
BankAccountক্লাসের একটি partial mock তৈরি করা হয়েছে। - addMockedMethod("withdraw"): আমরা শুধুমাত্র
withdraw()মেথডটি মক করছি, যাdeposit()মেথডের আসল কার্যকারিতা পরিবর্তন করবে না। - expectLastCall().times(1): আমরা আশা করি যে
deposit()মেথডটি একবার কল হবে। - replay(partialMock): মক অবজেক্টটি রিপ্লে মোডে সেট করা হয়, যাতে আমরা মক কন্ট্রোলের আচরণ পরীক্ষা করতে পারি।
- verify(partialMock): যাচাই করে দেখা হয় যে মক মেথডটি সঠিকভাবে কল হয়েছে কিনা।
Partial Mocking এর মাধ্যমে কী লাভ হবে?
- Test Specific Behaviors: আপনি মক করতে চান এমন মেথডগুলির আচরণ পরিবর্তন করে, কিন্তু বাকি মেথডগুলির আসল কার্যকারিতা রাখতে পারেন। এতে টেস্টের জন্য শুধুমাত্র প্রয়োজনীয় অংশ পরিবর্তন করা হয়।
- Performance Optimization: বড় এবং কমপ্লেক্স ক্লাসগুলির জন্য যখন কিছু অংশ মক করা প্রয়োজন হয় এবং কিছু অংশের আসল কার্যকারিতা রাখা হয়, তখন Partial Mocking খুবই কার্যকর।
- Code Flexibility: আপনি কেবলমাত্র যে মেথডগুলো পরীক্ষা করতে চান সেগুলোকেই মক করে বাকী অংশের কার্যকারিতা ঠিক রাখতে পারেন।
Partial Mocking এর সুবিধা এবং ব্যবহার
- Test Isolation: কিছু মেথড মক করার মাধ্যমে, আপনি কোডের নির্দিষ্ট অংশ পরীক্ষা করতে পারবেন, অন্যদিকে বাকি অংশের আসল আচরণ ঠিক থাকবে।
- Spy Behavior: Spy Pattern এর মতো, এটি মক অবজেক্টের কিছু অংশ পরিবর্তন করার সুযোগ দেয়।
- Reduced Complexity: কোডের মধ্যে নির্দিষ্ট অংশের মকিং করে, আপনি অন্যান্য অংশের আচরণ কন্ট্রোল না করে কোডের কার্যকারিতা পরীক্ষা করতে পারেন।
সারাংশ
EasyMock.partialMockBuilder() একটি শক্তিশালী টুল যা partial mocks তৈরি করতে ব্যবহৃত হয়, যেখানে আপনি একটি ক্লাসের কিছু মেথড মক করতে পারেন এবং বাকি মেথডের আসল আচরণ বজায় রাখেন। এটি আপনাকে টেস্টিং প্রক্রিয়ায় আরো flexibility এবং control দেয়, যেখানে আপনি শুধুমাত্র সিস্টেমের নির্দিষ্ট অংশ পরীক্ষার জন্য পরিবর্তন করতে পারেন, বাকী অংশের কার্যকারিতা অপরিবর্তিত থাকে।
Read more