CodeGym /Kursus Java /Modul 3 /Mengejek objek

Mengejek objek

Modul 3
Tahap , pelajaran
Tersedia

3.1 kaedah doReturn().

Kini datang keajaiban...

Katakan anda mencipta objek olok-olok palsu, tetapi anda memerlukannya untuk berfungsi entah bagaimana. Apabila kaedah tertentu dipanggil, sesuatu yang penting telah dilakukan, atau kaedah mengembalikan hasil tertentu. Apa nak buat?

Pustaka Mockito membolehkan anda menambah gelagat yang diingini pada objek olok-olok.

Jika anda mahu objek olok-olok mengembalikan hasil tertentu apabila kaedah tertentu dipanggil, maka "peraturan" ini boleh ditambah pada objek menggunakan kod:

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

Anda lihat, pada penghujung panggilan kaedah, method name?sebenarnya tiada panggilan berlaku di sini. Kaedah ini doReturn()mengembalikan objek proksi khas dengan bantuan yang mana ia memantau panggilan kaedah objek dan, dengan itu, peraturan ditulis.

sekali lagi. Ia adalah cara yang bijak untuk menulis peraturan untuk ditambahkan pada objek olok-olok . Ia memerlukan sedikit kemahiran untuk mentafsir kod tersebut dengan betul dalam kepala anda apabila anda melihatnya. Datang dengan pengalaman.

Saya rasa contoh konkrit diperlukan. Mari buat objek kelas olok-olok ArrayListdan minta kaedahnya size()untuk mengembalikan nombor 10. Kod lengkap akan kelihatan seperti ini:

@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());
    }
}

Ya, kod ini akan berfungsi, ujian tidak akan gagal.

3.2 kaedah bila().

Terdapat satu lagi cara untuk menambah peraturan tingkah laku pada objek olok-olok - dengan memanggil Mockito.when(). Ia kelihatan seperti ini:

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

Ini adalah cara yang sama untuk menulis peraturan tingkah laku objek olok-olok seperti yang sebelumnya. Bandingkan:

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

Di sini perkara yang sama berlaku - pembinaan peraturan baru.

Benar, contoh pertama mempunyai dua tolak:

  • panggilan itu sangat mengelirukan.an object.method name()
  • tidak akan berfungsi jika kaedah itu methodname()kembali void.

Baiklah, mari tulis contoh kegemaran kami menggunakanMockito.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 kaedah doThrow().

Kami mengetahui cara membuat kaedah objek olok-olok mengembalikan hasil tertentu. Bagaimanakah saya boleh membuatnya membuang pengecualian khusus? Hantar ke doReturn()?

Untuk mengelakkan kaedah daripada kembali, iaitu membuang pengecualian, anda perlu menetapkan peraturan menggunakan doThrow().

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

Dan kemudian pilihan kedua:

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

Agak dijangka, kan?

Nah, anda lihat, anda sudah mula memahami. Mari kita betulkan dengan contoh:

@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
    }
}

Jika anda perlu membuang objek pengecualian tertentu, kemudian gunakan pembinaan borang:

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

Hanya hantar doThrow()objek pengecualian kepada kaedah dan ia akan dilemparkan semasa panggilan kaedah.

Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION