EasyMock হল একটি জনপ্রিয় mocking framework যা Java টেস্টিংয়ের জন্য ব্যবহৃত হয়। EasyMock.reset() এবং EasyMock.replayAll() হল দুটি গুরুত্বপূর্ণ মেথড যা মক অবজেক্টের ব্যবহারে সাহায্য করে, বিশেষ করে যখন আপনি একাধিক টেস্ট বা মক অবজেক্টের জন্য একাধিক এক্সপেকটেশন বা আচরণ নির্ধারণ করতে চান। এগুলি মূলত mock lifecycle এর অংশ এবং বিভিন্ন পরিস্থিতিতে ব্যবহার করা হয়।
এখানে আমরা EasyMock.reset() এবং EasyMock.replayAll() মেথডগুলির ব্যবহার এবং তাদের কার্যকারিতা বিশ্লেষণ করব।
1. EasyMock.reset()
EasyMock.reset() মেথডটি একটি মক অবজেক্টের state পুনরুদ্ধার করতে ব্যবহৃত হয়। যখন আপনি reset() কল করেন, তখন মক অবজেক্টের সমস্ত পূর্ববর্তী expectations, verifications, এবং interactions মুছে ফেলা হয় এবং এটি পুনরায় ব্যবহার করার জন্য প্রস্তুত হয়।
এটি তখন ব্যবহার করা হয় যখন আপনি একটি মক অবজেক্টের উপর নতুন এক্সপেকটেশন সেট করতে চান, কিন্তু একই মক অবজেক্টটি একাধিক টেস্ট বা টেস্ট কেসে ব্যবহার করতে চান।
1.1. reset() Example
import org.easymock.EasyMock;
import org.junit.Test;
import static org.junit.Assert.*;
interface CalculatorService {
int add(int a, int b);
int subtract(int a, int b);
}
public class ResetExample {
@Test
public void testResetExample() {
// Create mock object
CalculatorService calculatorMock = EasyMock.createMock(CalculatorService.class);
// Set expectation for add() method
EasyMock.expect(calculatorMock.add(10, 20)).andReturn(30);
// Activate the mock
EasyMock.replay(calculatorMock);
// Use the mock object
int result = calculatorMock.add(10, 20);
assertEquals(30, result);
// Reset the mock object (clear all previous expectations and interactions)
EasyMock.reset(calculatorMock);
// Set new expectations for subtract() method
EasyMock.expect(calculatorMock.subtract(10, 5)).andReturn(5);
// Activate the mock again
EasyMock.replay(calculatorMock);
// Use the mock object again
int subtractResult = calculatorMock.subtract(10, 5);
assertEquals(5, subtractResult);
// Verify the mock interactions
EasyMock.verify(calculatorMock);
}
}
ব্যাখ্যা:
- প্রথমে add() মেথডের জন্য এক্সপেকটেশন সেট করা হয়েছে এবং replay() মেথডটি কল করা হয়েছে।
- তারপর reset() মেথডটি কল করার পর, subtract() মেথডের জন্য নতুন এক্সপেকটেশন সেট করা হয়েছে।
- reset() কল করার পর, মক অবজেক্টের পূর্ববর্তী এক্সপেকটেশন এবং ইন্টারঅ্যাকশন মুছে ফেলা হয়েছে, এবং এটি নতুন এক্সপেকটেশনগুলির সাথে কাজ করতে প্রস্তুত হয়েছে।
আউটপুট:
Test passed successfully.
2. EasyMock.replayAll()
EasyMock.replayAll() মেথডটি একাধিক মক অবজেক্টের replay mode সক্রিয় করার জন্য ব্যবহৃত হয়। যখন আপনি একাধিক মক অবজেক্ট তৈরি করেন এবং তাদের উপর একাধিক এক্সপেকটেশন সেট করেন, তখন replayAll() কল করার মাধ্যমে সমস্ত মক অবজেক্টের replay mode সক্রিয় করা হয়। এটি একাধিক মক অবজেক্টের জন্য একযোগভাবে কাজ করতে সহায়ক।
2.1. replayAll() Example
import org.easymock.EasyMock;
import org.junit.Test;
import static org.junit.Assert.*;
interface CalculatorService {
int add(int a, int b);
}
interface PaymentService {
boolean processPayment(int amount);
}
public class ReplayAllExample {
@Test
public void testReplayAllExample() {
// Create mock objects
CalculatorService calculatorMock = EasyMock.createMock(CalculatorService.class);
PaymentService paymentMock = EasyMock.createMock(PaymentService.class);
// Set expectations for calculator mock
EasyMock.expect(calculatorMock.add(10, 20)).andReturn(30);
// Set expectations for payment mock
EasyMock.expect(paymentMock.processPayment(100)).andReturn(true);
// Activate replay mode for all mocks
EasyMock.replayAll();
// Use the mock objects
int result = calculatorMock.add(10, 20);
assertEquals(30, result);
boolean paymentResult = paymentMock.processPayment(100);
assertTrue(paymentResult);
// Verify all mock interactions
EasyMock.verifyAll();
}
}
ব্যাখ্যা:
- এখানে দুটি মক অবজেক্ট তৈরি করা হয়েছে: CalculatorService এবং PaymentService।
- তাদের জন্য এক্সপেকটেশন সেট করা হয়েছে এবং replayAll() মেথডটি কল করে সমস্ত মক অবজেক্টের জন্য replay mode সক্রিয় করা হয়েছে।
- এরপর, দুইটি মক অবজেক্টের মেথড কল করা হয়েছে এবং তাদের রিটার্ন ভ্যালু যাচাই করা হয়েছে।
- verifyAll() মেথডটি কল করে আমরা নিশ্চিত করেছি যে সমস্ত মক অবজেক্টের expectations সঠিকভাবে পূর্ণ হয়েছে।
আউটপুট:
Test passed successfully.
3. reset() এবং replayAll() এর ব্যবহারের ক্ষেত্রে কিছু গুরুত্বপূর্ণ দিক
- reset() ব্যবহৃত হয় যখন আপনি একই মক অবজেক্টের উপর একাধিক এক্সপেকটেশন সেট করতে চান, এবং পূর্বের expectations বা interactions মুছে ফেলার প্রয়োজন হয়।
- replayAll() একাধিক মক অবজেক্টের জন্য একযোগভাবে replay mode সক্রিয় করতে ব্যবহৃত হয়, যা একাধিক মক অবজেক্টের কাজকে সিঙ্ক্রোনাইজড করতে সাহায্য করে।
- verifyAll() ব্যবহার করে নিশ্চিত করা যায় যে সমস্ত মক অবজেক্টের উপর নির্ধারিত expectations সঠিকভাবে কার্যকরী হয়েছে।
সারাংশ
- EasyMock.reset() মেথডটি একটি মক অবজেক্টের পূর্ববর্তী এক্সপেকটেশন এবং ইন্টারঅ্যাকশন মুছে ফেলে এবং এটি নতুন এক্সপেকটেশন সেট করতে প্রস্তুত করে।
- EasyMock.replayAll() একাধিক মক অবজেক্টের জন্য replay mode সক্রিয় করে, যা সমস্ত মক অবজেক্টের কার্যকলাপ একযোগভাবে পরিচালনা করতে সাহায্য করে।
- এই দুটি মেথড unit testing তে মক অবজেক্টের সঠিক ব্যবহার নিশ্চিত করতে সহায়ক।
Read more