3.1 doReturn() na pamamaraan
Ngayon ay dumating ang magic...
Sabihin nating gumawa ka ng pekeng mock object, ngunit kailangan mo itong gumana kahit papaano. Kapag ang ilang mga pamamaraan ay tinawag, isang bagay na mahalaga ay ginawa, o ang mga pamamaraan ay nagbalik ng isang tiyak na resulta. Anong gagawin?
Binibigyang-daan ka ng Mockito library na idagdag ang nais na gawi sa isang mock object.
Kung gusto mo ang isang kunwaring bagay na magbalik ng isang tiyak na resulta kapag tinawag ang isang tiyak na pamamaraan, ang "panuntunan" na ito ay maaaring idagdag sa bagay gamit ang code:
Mockito.doReturn(result).when(an object).method name();
Tingnan mo, sa dulo ng method call, method name?
wala talagang tawag dito. Ang pamamaraan doReturn()
ay nagbabalik ng isang espesyal na proxy-object sa tulong kung saan sinusubaybayan nito ang mga tawag ng mga pamamaraan ng object at, sa gayon, ang panuntunan ay nakasulat.
muli. Ito ay isang matalinong paraan upang magsulat ng isang panuntunan upang idagdag sa isang mock object . Nangangailangan ng ilang kasanayan upang mabigyang-kahulugan nang tama ang naturang code sa iyong ulo kapag nakita mo ito. May kasamang karanasan.
Sa tingin ko kailangan ng isang kongkretong halimbawa. Gumawa tayo ng mock class object ArrayList
at hilingin sa pamamaraan nito size()
na ibalik ang numero 10. Magiging ganito ang kumpletong code:
@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());
}
}
Oo, gagana ang code na ito, hindi mabibigo ang pagsubok.
3.2 kapag() na pamamaraan
May isa pang paraan upang magdagdag ng panuntunan sa pag-uugali sa isang mock object - sa pamamagitan ng pagtawag sa Mockito.when()
. Mukhang ganito:
Mockito.when(an object.method name()).thenReturn(result);
Ito ay ang parehong paraan ng pagsusulat ng mock object behavior rule gaya ng nauna. Ihambing:
Mockito.doReturn(result).when(an object).method name();
Narito ang eksaktong parehong bagay na nangyayari - ang pagbuo ng isang bagong panuntunan.
Totoo, ang unang halimbawa ay may dalawang minus:
- sobrang nakakalito ang tawag .
an object.method name()
- hindi gagana kung
methodname()
babalik ang pamamaraanvoid
.
Well, isulat natin ang paborito nating halimbawa gamit angMockito.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() na pamamaraan
Naisip namin kung paano gumawa ng isang mock object method na magbabalik ng isang partikular na resulta. Paano ko ito magagawang magtapon ng isang partikular na pagbubukod? Ipadala ito sa doReturn()
?
Upang maiwasang bumalik ang paraan, lalo na ang paghahagis ng exception, kailangan mong itakda ang panuntunan gamit ang doThrow()
.
Mockito.doThrow(exception.class).when(an object).method name();
At pagkatapos ay ang pangalawang pagpipilian:
Mockito.when(an object.method name()).thenThrow(exception.class);
Medyo inaasahan, tama ba?
Well, you see, nagsisimula ka nang umintindi. Ayusin natin ito sa isang halimbawa:
@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
}
}
Kung kailangan mong magtapon ng isang partikular na object ng pagbubukod, pagkatapos ay gamitin ang pagbuo ng form:
Mockito.doThrow(new Exception()).when(an object).method name();
Ipasa lamang doThrow()
ang isang exception object sa method at ito ay itatapon sa method call.