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 ArrayList
dan 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()
kembalivoid
.
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.
GO TO FULL VERSION