Mocks এবং Stubs হল testing টেকনিক যা সাধারণত unit testing এবং mocking এ ব্যবহৃত হয়, বিশেষ করে যখন আপনি কোনও নির্দিষ্ট অবজেক্ট বা ক্লাসের আচরণ পরীক্ষা করতে চান। তবে এগুলির মধ্যে কিছু মৌলিক পার্থক্য রয়েছে, বিশেষ করে EasyMock বা অন্যান্য mocking frameworks ব্যবহারের ক্ষেত্রে।
১. Stubs (স্টাবস)
Stubs হল এমন একটি টেস্ট ডাব্লি বা ফাংশন যা নির্দিষ্ট আউটপুট প্রদান করে, তবে এটি সাধারণত কার্যকলাপের জন্য ব্যবহৃত হয় না। এটি শুধুমাত্র একটি নির্দিষ্ট ইনপুটের জন্য এক্সপেক্টেড আউটপুট রিটার্ন করে, যাতে আপনি আপনার টেস্টের অবজেক্ট বা সিস্টেমের অন্যান্য অংশের আচরণ নির্ধারণ করতে পারেন। Stubs সাধারণত hardcoded আউটপুট প্রদান করে এবং কোনো ইন্টারঅ্যাকশন বা যাচাইকরণ ছাড়া কাজ করে।
Stubs এর উদাহরণ:
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";
}
}
public class StubExampleTest {
@Test
public void testGetUserNameWithStub() {
// Create a stub for UserRepository
UserRepository userRepositoryStub = new UserRepository() {
@Override
public User findById(int id) {
return new User(1, "John"); // Stubbed response
}
};
UserService userService = new UserService(userRepositoryStub);
// Test the method
String result = userService.getUserName(1);
assertEquals("John", result);
}
}
Stubs এর বৈশিষ্ট্য:
- Stubs নির্দিষ্ট ইনপুটের জন্য নির্দিষ্ট আউটপুট প্রদান করে।
- এটি কার্যকলাপের বা অবজেক্টের আচরণ পরীক্ষা করে না।
- সাধারণত, stubs কেবল নির্দিষ্ট রিটার্ন মান প্রদান করে, পরীক্ষা করার জন্য কোনো জটিল আচরণ বা ইন্টারঅ্যাকশন নেই।
২. Mocks (মকস)
Mocks হল আরও উন্নত ধরনের টেস্ট অবজেক্ট যা নির্দিষ্ট method calls, parameters, number of times একটি মেথড কল করা হয়েছে, ইত্যাদি যাচাই করার জন্য ব্যবহৃত হয়। Mocks শুধুমাত্র ইনপুট দেওয়ার পাশাপাশি সিস্টেমের আচরণ এবং এর ইন্টারঅ্যাকশনও পরীক্ষা করে। এটি expectations নির্ধারণ করে এবং টেস্ট শেষে পরীক্ষা করে যে সেগুলি পূর্ণ হয়েছে কিনা।
Mocks এর উদাহরণ:
import static org.easymock.EasyMock.*;
public class MockExampleTest {
@Test
public void testGetUserNameWithMock() {
// Create a mock for UserRepository
UserRepository userRepositoryMock = createMock(UserRepository.class);
// Set expectations
expect(userRepositoryMock.findById(1)).andReturn(new User(1, "John"));
// Switch the mock to replay mode
replay(userRepositoryMock);
UserService userService = new UserService(userRepositoryMock);
// Test the method
String result = userService.getUserName(1);
assertEquals("John", result);
// Verify that the mock was called as expected
verify(userRepositoryMock);
}
}
Mocks এর বৈশিষ্ট্য:
- Mocks এর মাধ্যমে শুধুমাত্র ইনপুট বা আউটপুট পরীক্ষা নয়, বরং method calls, parameters, এবং number of times method call হয়েছিল তা যাচাই করা যায়।
- Mocks এর মাধ্যমে আমরা ইন্টারঅ্যাকশন চেক করতে পারি।
- মক অবজেক্টগুলির ব্যবহার কেবল নির্দিষ্ট আচরণের জন্য নয়, বরং সিস্টেমের কার্যকারিতা এবং এর মধ্যে সম্পর্কও যাচাই করা হয়।
Mocks এবং Stubs এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Stubs | Mocks |
|---|---|---|
| ব্যবহার | নির্দিষ্ট ইনপুটের জন্য আউটপুট প্রদান করা | সিস্টেমের আচরণ এবং ইন্টারঅ্যাকশন পরীক্ষা করা |
| ফোকাস | কেবল আউটপুট প্রদান এবং কিছু কার্যকলাপ পরীক্ষণ | মেথড কল, প্যারামিটার, এবং মেথডের কল গুণমান পরীক্ষা করা |
| জটিলতা | সাধারণত সহজ এবং সরল | অধিক জটিল এবং পরীক্ষা নির্ভর |
| পরীক্ষার ক্ষমতা | শুধুমাত্র আউটপুট এবং কেবল কনফিগারড ভ্যালু | method calls, parameters, call counts ইত্যাদি যাচাই করা |
| টেস্ট ভ্যালিডেশন | কোনো যাচাইকরণ নেই | verify() মেথড ব্যবহার করে মক অবজেক্টের আচরণ যাচাই করা |
| গঠন | শুধুমাত্র স্ট্যাটিক আউটপুট | গতিশীল আচরণ এবং সিস্টেমের মধ্যে ইন্টারঅ্যাকশন যাচাই |
সারাংশ
Stubs এবং Mocks উভয়ই unit testing এবং mocking কৌশল হিসেবে ব্যবহৃত হয়, কিন্তু তাদের ব্যবহার এবং উদ্দেশ্য আলাদা।
- Stubs কেবল নির্দিষ্ট আউটপুট প্রদান করে, যা শুধুমাত্র ইনপুট-আউটপুট সম্পর্কিত পরীক্ষা করে, তবে কোনো ইন্টারঅ্যাকশন বা মেথড কল যাচাই করে না।
- Mocks কেবল ইনপুট-আউটপুট সম্পর্কিত পরীক্ষা করার পাশাপাশি, সিস্টেমের আচরণ এবং ইন্টারঅ্যাকশন যাচাই করে, যেমন মেথডের কল সংখ্যা, প্যারামিটার যাচাই করা, এবং নির্দিষ্ট মেথড কলের প্রত্যাশিত আচরণ নিশ্চিত করা।
EasyMock সহ অন্যান্য টেস্টিং ফ্রেমওয়ার্কে, mocks এবং stubs উভয়ই ব্যবহৃত হতে পারে, তবে তারা বিভিন্ন পরীক্ষার উদ্দেশ্য সাধন করতে ভিন্নভাবে কাজ করে।
Read more