EasyMock একটি জনপ্রিয় mocking framework যা unit testing এ ব্যবহৃত হয়। এর মাধ্যমে, আপনি mock objects তৈরি করতে পারেন এবং সেগুলির জন্য বিভিন্ন মেথডের return values নির্ধারণ করতে পারেন। এর মাধ্যমে, আপনি সহজেই পরীক্ষা করতে পারেন যে আপনার কোড নির্দিষ্ট শর্তে সঠিকভাবে কাজ করছে কি না, যেমন dependency injection এর মাধ্যমে কন্ট্রোলার বা সার্ভিস লেয়ারের সাথে মডিউলগুলির ইন্টারঅ্যাকশন।
EasyMock এ মেথডের return value নির্ধারণ করার জন্য expect() এবং andReturn() মেথড ব্যবহৃত হয়। এই দুটি মেথডের মাধ্যমে, আপনি নির্দিষ্ট ইনপুটের জন্য mock মেথডের আউটপুট নির্ধারণ করতে পারেন।
Method Return Value নির্ধারণের উদাহরণ
ধরা যাক, আপনার একটি UserService ক্লাস রয়েছে, যা UserRepository ক্লাস থেকে ডেটা নিয়ে থাকে। এখানে, আমরা UserRepository কে মক করতে চাই এবং এর findById() মেথডের জন্য একটি নির্দিষ্ট return value প্রদান করতে চাই।
১. UserRepository Interface
public interface UserRepository {
User findById(int id);
}
২. UserService Class
public class UserService {
private UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public String getUserName(int id) {
User user = userRepository.findById(id);
return user != null ? user.getName() : "User not found";
}
}
৩. User Class
public class User {
private int id;
private String name;
public User(int id, String name) {
this.id = id;
this.name = name;
}
public String getName() {
return name;
}
}
৪. EasyMock Test Case (Return Value নির্ধারণ)
import static org.easymock.EasyMock.*;
import org.junit.Test;
import static org.junit.Assert.*;
public class UserServiceTest {
@Test
public void testGetUserName() {
// Create mock object for UserRepository
UserRepository mockUserRepository = createMock(UserRepository.class);
// Create a mock user
User mockUser = new User(1, "John");
// Set behavior for the mock object
expect(mockUserRepository.findById(1)).andReturn(mockUser); // Mock the return value
// Switch the mock to replay mode
replay(mockUserRepository);
// Create UserService with the mock object
UserService userService = new UserService(mockUserRepository);
// Test the method
String result = userService.getUserName(1);
assertEquals("John", result);
// Verify that the mock was called as expected
verify(mockUserRepository);
}
}
ব্যাখ্যা:
- createMock():
UserRepositoryএর মক অবজেক্ট তৈরি করা হয়। - expect(): আমরা
findById(1)মেথডের জন্য নির্দিষ্ট রিটার্ন ভ্যালু প্রদান করি (যেটিmockUserহবে)। - andReturn(): এটি
expect()এর সাথে ব্যবহার করা হয় এবং এটি নির্দিষ্ট আউটপুট বা রিটার্ন ভ্যালু ঠিক করে দেয়। - replay(): মক অবজেক্টের জন্য আমরা যা নির্ধারণ করেছি, তা বাস্তবায়ন করতে
replay()ব্যবহার করা হয়। - verify(): পরীক্ষা শেষে, আমরা যাচাই করি যে মক অবজেক্টটি নির্ধারিতভাবে কল হয়েছে কিনা।
Return Value নির্ধারণের আরও কিছু উদাহরণ:
১. Multiple Return Values
আপনি যদি একাধিক কলের জন্য আলাদা return value নির্ধারণ করতে চান, তবে এটি করা যায় andReturn() এর মাধ্যমে।
expect(mockUserRepository.findById(1)).andReturn(mockUser);
expect(mockUserRepository.findById(2)).andReturn(new User(2, "Jane"));
২. Return Value with Different Parameters
আপনি যদি নির্দিষ্ট প্যারামিটার অনুযায়ী আলাদা return value নির্ধারণ করতে চান, তবে এটি এভাবে করতে পারেন:
expect(mockUserRepository.findById(1)).andReturn(mockUser);
expect(mockUserRepository.findById(2)).andReturn(new User(2, "Alice"));
EasyMock এ Return Values নির্ধারণের সুবিধা:
- Test Independence: EasyMock ব্যবহার করে আপনি আসল ডেটাবেস বা বাহ্যিক সিস্টেমের উপর নির্ভর না করে ইউনিট টেস্ট করতে পারেন।
- Behavior Control: আপনি মক অবজেক্টের আচরণ নির্ধারণ করে পরীক্ষাগুলি সহজে কন্ট্রোল করতে পারেন।
- Clear Expectations:
expect()এবংandReturn()এর মাধ্যমে, মক অবজেক্টের জন্য স্পষ্ট প্রত্যাশা তৈরি করতে পারেন, যা পরীক্ষার সময় আরও সহজ হয়ে যায়। - Increased Testability: EasyMock মকিং এর মাধ্যমে, আপনার কোডের বিভিন্ন অংশ আলাদা আলাদা পরীক্ষা করা যায়, যার ফলে টেস্টিং আরো কার্যকরী হয়।
সারাংশ
EasyMock এর মাধ্যমে method return values নির্ধারণ করা একটি শক্তিশালী উপায় যা unit testing এবং mocking এর মধ্যে ব্যবহৃত হয়। এটি আপনাকে mock objects তৈরি করতে এবং তাদের নির্দিষ্ট আচরণ বা আউটপুট নির্ধারণ করতে সাহায্য করে। expect() এবং andReturn() মেথডের মাধ্যমে আপনি টেস্টের জন্য মক অবজেক্টের return value নির্ধারণ করতে পারেন, যা NullPointerException থেকে মুক্তি পেতে এবং কোডের পরীক্ষামূলক কার্যকারিতা নিশ্চিত করতে সহায়তা করে।
Read more