Mocks এবং Stubs এর মধ্যে পার্থক্য

EasyMock এর বেসিক কনসেপ্ট - ইজিমক (EasyMock) - Java Technologies

355

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 এর মধ্যে পার্থক্য

বৈশিষ্ট্যStubsMocks
ব্যবহারনির্দিষ্ট ইনপুটের জন্য আউটপুট প্রদান করাসিস্টেমের আচরণ এবং ইন্টারঅ্যাকশন পরীক্ষা করা
ফোকাসকেবল আউটপুট প্রদান এবং কিছু কার্যকলাপ পরীক্ষণমেথড কল, প্যারামিটার, এবং মেথডের কল গুণমান পরীক্ষা করা
জটিলতাসাধারণত সহজ এবং সরলঅধিক জটিল এবং পরীক্ষা নির্ভর
পরীক্ষার ক্ষমতাশুধুমাত্র আউটপুট এবং কেবল কনফিগারড ভ্যালুmethod calls, parameters, call counts ইত্যাদি যাচাই করা
টেস্ট ভ্যালিডেশনকোনো যাচাইকরণ নেইverify() মেথড ব্যবহার করে মক অবজেক্টের আচরণ যাচাই করা
গঠনশুধুমাত্র স্ট্যাটিক আউটপুটগতিশীল আচরণ এবং সিস্টেমের মধ্যে ইন্টারঅ্যাকশন যাচাই

সারাংশ

Stubs এবং Mocks উভয়ই unit testing এবং mocking কৌশল হিসেবে ব্যবহৃত হয়, কিন্তু তাদের ব্যবহার এবং উদ্দেশ্য আলাদা।

  • Stubs কেবল নির্দিষ্ট আউটপুট প্রদান করে, যা শুধুমাত্র ইনপুট-আউটপুট সম্পর্কিত পরীক্ষা করে, তবে কোনো ইন্টারঅ্যাকশন বা মেথড কল যাচাই করে না।
  • Mocks কেবল ইনপুট-আউটপুট সম্পর্কিত পরীক্ষা করার পাশাপাশি, সিস্টেমের আচরণ এবং ইন্টারঅ্যাকশন যাচাই করে, যেমন মেথডের কল সংখ্যা, প্যারামিটার যাচাই করা, এবং নির্দিষ্ট মেথড কলের প্রত্যাশিত আচরণ নিশ্চিত করা।

EasyMock সহ অন্যান্য টেস্টিং ফ্রেমওয়ার্কে, mocks এবং stubs উভয়ই ব্যবহৃত হতে পারে, তবে তারা বিভিন্ন পরীক্ষার উদ্দেশ্য সাধন করতে ভিন্নভাবে কাজ করে।

Content added By
Promotion

Are you sure to start over?

Loading...