Complex Return Type Handling in EasyMock
EasyMock ব্যবহার করে আপনি একটি মেথডের জন্য complex return types যেমন objects, lists, maps, বা other collections মক করতে পারেন। সাধারণত, যখন আপনার মক অবজেক্টের কোন মেথডে এমন একটি return type থাকে যা সোজাসুজি primitive types এর বাইরে (যেমন, একটি complex object বা collection), তখন EasyMock ব্যবহার করে এই return value গুলি মক করা হয়।
ধরা যাক, আপনি একটি Service ক্লাসে এমন একটি মেথড মক করতে চান যা একটি List রিটার্ন করবে।
Collection Handling in EasyMock
EasyMock ব্যবহার করে collections যেমন List, Set, Map, ইত্যাদি মক করা যায়। আপনি expect() এবং andReturn() মেথড ব্যবহার করে প্রত্যাশিত collection values নির্ধারণ করতে পারেন।
উদাহরণ 1: List as a Complex Return Type
ধরা যাক, আপনার একটি Service ইন্টারফেস রয়েছে যার মধ্যে getUsers() নামক একটি মেথড রয়েছে যা একটি List রিটার্ন করবে।
import java.util.List;
public interface Service {
List<String> getUsers();
}
এখন, আপনি EasyMock ব্যবহার করে getUsers() মেথডের জন্য return value হিসেবে একটি List মক করবেন।
Step 1: Test Class with List Return Type
import org.easymock.EasyMock;
import org.junit.Test;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.List;
public class EasyMockComplexReturnTest {
@Test
public void testGetUsers() {
// Create mock object for Service
Service serviceMock = EasyMock.createMock(Service.class);
// Create a mock return value (List<String>)
List<String> mockUserList = Arrays.asList("John", "Alice", "Bob");
// Set expectation to return the mock user list
EasyMock.expect(serviceMock.getUsers()).andReturn(mockUserList);
// Activate the mock
EasyMock.replay(serviceMock);
// Call the method and assert the result
List<String> users = serviceMock.getUsers();
assertEquals(3, users.size());
assertTrue(users.contains("John"));
assertTrue(users.contains("Alice"));
assertTrue(users.contains("Bob"));
// Verify that the expected methods were called
EasyMock.verify(serviceMock);
}
}
ব্যাখ্যা:
- List mockUserList: এটি একটি mock list তৈরি করে যা ৩টি ব্যবহারকারীর নাম ধারণ করে।
- EasyMock.expect(): এটি
getUsers()মেথডের জন্য প্রত্যাশা তৈরি করে, যাতে মক অবজেক্টটি এই লিস্টটি রিটার্ন করে। - EasyMock.replay(): এটি মক অবজেক্টে প্রত্যাশাগুলি সক্রিয় করে এবং মেথড কল পরীক্ষা করার জন্য প্রস্তুত করে।
- assertEquals() এবং assertTrue(): এটি নিশ্চিত করে যে
getUsers()মেথড থেকে প্রাপ্ত লিস্টে সঠিক ব্যবহারকারীরা রয়েছে। - EasyMock.verify(): এটি যাচাই করে যে প্রত্যাশিত মেথডগুলি সঠিকভাবে কল হয়েছে।
উদাহরণ 2: Map as a Complex Return Type
এখন, যদি একটি মেথড একটি Map<String, Integer> রিটার্ন করে, তাহলে কিভাবে সেটি মক করা যাবে? নিচে একটি উদাহরণ দেওয়া হল।
import java.util.Map;
import java.util.HashMap;
public interface Service {
Map<String, Integer> getUserAgeMap();
}
এখন, আমরা EasyMock ব্যবহার করে Map<String, Integer> রিটার্ন মক করব।
import org.easymock.EasyMock;
import org.junit.Test;
import static org.junit.Assert.*;
import java.util.HashMap;
import java.util.Map;
public class EasyMockComplexReturnTest {
@Test
public void testGetUserAgeMap() {
// Create mock object for Service
Service serviceMock = EasyMock.createMock(Service.class);
// Create a mock return value (Map<String, Integer>)
Map<String, Integer> mockUserAgeMap = new HashMap<>();
mockUserAgeMap.put("John", 25);
mockUserAgeMap.put("Alice", 30);
mockUserAgeMap.put("Bob", 22);
// Set expectation to return the mock user age map
EasyMock.expect(serviceMock.getUserAgeMap()).andReturn(mockUserAgeMap);
// Activate the mock
EasyMock.replay(serviceMock);
// Call the method and assert the result
Map<String, Integer> userAgeMap = serviceMock.getUserAgeMap();
assertEquals(3, userAgeMap.size());
assertEquals(Integer.valueOf(25), userAgeMap.get("John"));
assertEquals(Integer.valueOf(30), userAgeMap.get("Alice"));
assertEquals(Integer.valueOf(22), userAgeMap.get("Bob"));
// Verify that the expected methods were called
EasyMock.verify(serviceMock);
}
}
ব্যাখ্যা:
- Map<String, Integer> mockUserAgeMap: এটি একটি mock map তৈরি করে যেখানে ব্যবহারকারীদের নাম এবং তাদের বয়স নির্ধারণ করা হয়।
- EasyMock.expect(): এটি
getUserAgeMap()মেথডের জন্য প্রত্যাশা তৈরি করে, যাতে মক অবজেক্টটি mock map রিটার্ন করে। - EasyMock.replay(): এটি মক অবজেক্টের পূর্বনির্ধারিত আচরণ সক্রিয় করে।
- assertEquals(): এটি যাচাই করে যে মক map থেকে সঠিক মান রিটার্ন হচ্ছে।
- EasyMock.verify(): এটি যাচাই করে যে প্রত্যাশিত মেথডটি সঠিকভাবে কল হয়েছে কিনা।
Complex Return Types এবং Collections Handling
EasyMock দিয়ে complex return types এবং collections মক করার সময়, আপনি সহজেই Lists, Maps, Sets, অথবা other collections মক করতে পারেন। এই ধরনের mocking আপনার টেস্টিংয়ের জন্য অত্যন্ত গুরুত্বপূর্ণ, কারণ আপনি ডিপেন্ডেন্সি ম্যানেজমেন্ট এবং একাধিক ডেটা ধরনের সাথে কাজ করার জন্য এই টুলটি ব্যবহার করতে পারেন।
Multiple Collections Handling Example
একাধিক collection ব্যবহার করা হলে, যেমন List এবং Map একসাথে, এটি EasyMock-এ খুব সহজেই করা যেতে পারে।
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.Arrays;
public interface Service {
List<String> getNames();
Map<String, Integer> getNameAgeMap();
}
import org.easymock.EasyMock;
import org.junit.Test;
import static org.junit.Assert.*;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
public class EasyMockMultipleCollectionsTest {
@Test
public void testGetNamesAndAgeMap() {
// Create mock object for Service
Service serviceMock = EasyMock.createMock(Service.class);
// Create mock return value (List and Map)
List<String> mockNamesList = Arrays.asList("John", "Alice", "Bob");
Map<String, Integer> mockNameAgeMap = new HashMap<>();
mockNameAgeMap.put("John", 25);
mockNameAgeMap.put("Alice", 30);
// Set expectations
EasyMock.expect(serviceMock.getNames()).andReturn(mockNamesList);
EasyMock.expect(serviceMock.getNameAgeMap()).andReturn(mockNameAgeMap);
// Activate the mock
EasyMock.replay(serviceMock);
// Test the methods and verify the results
List<String> names = serviceMock.getNames();
assertEquals(3, names.size());
assertTrue(names.contains("Alice"));
Map<String, Integer> nameAgeMap = serviceMock.getNameAgeMap();
assertEquals(Integer.valueOf(25), nameAgeMap.get("John"));
assertEquals(Integer.valueOf(30), nameAgeMap.get("Alice"));
// Verify that the expected methods were called
EasyMock.verify(serviceMock);
}
}
ব্যাখ্যা:
- এখানে আমরা দুটি collection—একটি List এবং একটি Map—মক করেছি।
- EasyMock.expect() এর মাধ্যমে প্রত্যাশা তৈরি করেছি, যেখানে আমরা
getNames()এবংgetNameAgeMap()মেথডের জন্য ডেটা রিটার্ন করেছি। - EasyMock.replay() এবং EasyMock.verify() মেথডের মাধ্যমে, আমরা নিশ্চিত করেছি যে মক অবজেক্ট সঠিকভাবে ব্যবহৃত হয়েছে।
সারাংশ
EasyMock দিয়ে complex return types এবং collections যেমন List, Map, Set, ইত্যাদি মক করা খুব সহজ এবং কার্যকরী। আপনি expect() এবং andReturn() মেথড ব্যবহার করে প্রত্যাশিত return values বা collections নির্ধারণ করতে পারেন। যখন আপনার টেস্টে complex data structures ব্যবহার করা হয়, তখন EasyMock এর সাহায্যে আপনি সেগুলির আচরণ সহজেই মক করতে পারেন, যা আপনার ইউনিট টেস্টিংয়ের জন্য খুবই সহায়ক।
Read more