CodeGym /Java Course /মডিউল 3 /উপহাসকারী বস্তু

উপহাসকারী বস্তু

মডিউল 3
লেভেল 4 , পাঠ 2
বিদ্যমান

3.1 doReturn() পদ্ধতি

এবার আসছে ম্যাজিক...

ধরা যাক আপনি একটি জাল মক অবজেক্ট তৈরি করেছেন, কিন্তু আপনার এটি কোনোভাবে কাজ করতে হবে। যখন নির্দিষ্ট পদ্ধতিগুলিকে ডাকা হয়েছিল, তখন গুরুত্বপূর্ণ কিছু করা হয়েছিল, বা পদ্ধতিগুলি একটি নির্দিষ্ট ফলাফল ফিরিয়ে দিয়েছিল। কি করো?

মকিটো লাইব্রেরি আপনাকে একটি মক অবজেক্টে পছন্দসই আচরণ যোগ করতে দেয়।

আপনি যদি চান যে একটি নির্দিষ্ট পদ্ধতি কল করার সময় একটি মক অবজেক্ট একটি নির্দিষ্ট ফলাফল ফেরত দেয়, তাহলে কোড ব্যবহার করে এই "নিয়ম" বস্তুতে যোগ করা যেতে পারে:

Mockito.doReturn(result).when(an object).method name();

আপনি দেখুন, মেথড কলের শেষে, method name?এখানে আসলে কোন কল চলছে না। পদ্ধতিটি doReturn()একটি বিশেষ প্রক্সি-অবজেক্ট প্রদান করে যার সাহায্যে এটি বস্তুর পদ্ধতির কলগুলি পর্যবেক্ষণ করে এবং এইভাবে, নিয়মটি লেখা হয়।

আবার। একটি উপহাস বস্তুতে যোগ করার জন্য একটি নিয়ম লিখতে এটি একটি চতুর উপায় । আপনি যখন এটি দেখেন তখন আপনার মাথায় এই জাতীয় কোডটি সঠিকভাবে ব্যাখ্যা করতে কিছু দক্ষতা লাগে। অভিজ্ঞতা নিয়ে আসে।

আমি মনে করি একটি সুনির্দিষ্ট উদাহরণ প্রয়োজন। আসুন একটি মক ক্লাস অবজেক্ট তৈরি করি ArrayListএবং এর পদ্ধতিটি size()10 ​​নম্বরটি ফেরত দিতে বলি। সম্পূর্ণ কোডটি এইরকম দেখাবে:

@ExtendWith(MockitoExtension.class)
class DoReturnTest {
    @Mock
    List mockList;

    @Test
    public void whenMockAnnotation () {
         //create a rule: return 10 when calling the size method
        Mockito.doReturn(10).when(mockList).size();

        //the method is called here and will return 10!!
        assertEquals(10, mockList.size());
    }
}

হ্যাঁ, এই কোড কাজ করবে, পরীক্ষা ব্যর্থ হবে না.

3.2 when() পদ্ধতি

একটি উপহাস বস্তুতে একটি আচরণের নিয়ম যোগ করার আরেকটি উপায় আছে - কল করে Mockito.when()। এটি এই মত দেখায়:

Mockito.when(an object.method name()).thenReturn(result);

এটি আগেরটির মতো একটি মক অবজেক্ট আচরণের নিয়ম লেখার একই উপায়। তুলনা করা:

Mockito.doReturn(result).when(an object).method name();

এখানে ঠিক একই জিনিস ঘটে - একটি নতুন নিয়ম নির্মাণ।

সত্য, প্রথম উদাহরণের দুটি বিয়োগ আছে:

  • কল খুব বিভ্রান্তিকর.an object.method name()
  • পদ্ধতিটি methodname()ফিরে আসলে কাজ করবে না void

ওয়েল, এর ব্যবহার করে আমাদের প্রিয় উদাহরণ লিখুনMockito.when()

@ExtendWith(MockitoExtension.class)
class WhenTest {
    @Mock
    List mockList;

    @Test
    public void whenMockAnnotation() {
        //create a rule: return 10 when calling the size method
        Mockito.when(mockList.size() ).thenReturn(10);

        //the method is called here and will return 10!!
        assertEquals(10, mockList.size());
    }
}

3.3 doThrow() পদ্ধতি

আমরা খুঁজে বের করেছি কিভাবে একটি মক অবজেক্ট পদ্ধতি একটি নির্দিষ্ট ফলাফল প্রদান করতে হয়। আমি কিভাবে এটি একটি নির্দিষ্ট ব্যতিক্রম নিক্ষেপ করতে পারি? পাঠাবেন doReturn()?

পদ্ধতিটি ফিরে আসা থেকে প্রতিরোধ করতে, যেমন একটি ব্যতিক্রম নিক্ষেপ করা, আপনাকে ব্যবহার করে নিয়ম সেট করতে হবে doThrow()

Mockito.doThrow(exception.class).when(an object).method name();

এবং তারপর দ্বিতীয় বিকল্প:

Mockito.when(an object.method name()).thenThrow(exception.class);

একটু প্রত্যাশিত, তাই না?

ঠিক আছে, আপনি দেখতে পাচ্ছেন, আপনি ইতিমধ্যে বুঝতে শুরু করেছেন। একটি উদাহরণ দিয়ে এটি ঠিক করা যাক:

@ExtendWith(MockitoExtension.class)
class DoThrowTest {
    @Mock
    List mockList;

    @Test
    public void whenMockAnnotation() {
        Mockito.when(mockList.size() ).thenThrow(IllegalStateException.class);
        mockList.size(); //an exception will be thrown here
    }
}

আপনি যদি একটি নির্দিষ্ট ব্যতিক্রম বস্তু নিক্ষেপ করতে চান, তারপর ফর্ম নির্মাণ ব্যবহার করুন:

Mockito.doThrow(new Exception()).when(an object).method name();

doThrow()পদ্ধতিতে শুধুমাত্র একটি ব্যতিক্রম বস্তু পাস করুন এবং এটি পদ্ধতি কলের সময় নিক্ষেপ করা হবে।

মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION