1.1 Mockito library
Ngayon ay makikilala natin ang advanced na pagsubok. Mas partikular, sa Mockito library . Huwag mo nang isipin ang pag-alis sa negosyong ito.
Una, ang library na ito ay isang pamantayan sa Spring testing . Alin ang talagang pamantayan sa industriya ng pag-unlad ng backend ng Java.
Pangalawa, kakailanganin mong magsulat ng mga pagsubok para sa iyong Spring code . Ang tanging paraan upang maunawaan na gumagana ang backend na iyong isinulat ayon sa nararapat ay ang pagtawag sa mga pamamaraan ng API nito . At ang paggawa nito sa mga pagsubok ay 10 beses na mas madali kaysa sa wala sila. Makikita mo para sa iyong sarili.
Maaari mong idagdag ang Mockito library sa iyo pom.xml
gamit ang code:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>
Ang buong source code para sa proyekto ng Mockito ay matatagpuan sa GitHub .
1.2 Mock object
Kaya ano ang Mockito na ito at bakit ito napakahusay?
Sa proseso ng pag-unlad at pag-unlad ng pagsubok, kadalasan ay may pangangailangan na mag-slip ng ilang uri ng "stub" sa code sa halip na isang tunay na bagay.
Halimbawa, ang code na gumagana sa database ay nasubok at nagbabago ng isang bagay doon. Mabuti na bago ang bawat pagsubok ang estado ng database na ito ay pareho (kung hindi, ang mga pagsubok ay magkakaiba). At gusto kong maging mas simple ang base upang mabilis na maibalik ang mga estadong ito.
O, halimbawa, sinusubukan mo ang isang code na nagpapadala ng kapaki-pakinabang na SMS. At para sa mga direktang pagpapadala, gumagamit siya ng ilang uri ng bayad na SMS Gateway. Magiging mainam na maglagay ng ilang virtual na Gateway dito upang subukan ang code, upang hindi magpadala ng daan-daang SMS sa mga taong hindi maintindihan.
O ang iyong code ay humihiling ng data mula sa iba pang mga web server na sadyang hindi available sa test server. O kaya ay sumulat ka ng isang code para sa mga online na pagbabayad na kailangang masuri ng 50 beses, at pagkatapos ay pinapayagan na gamitin sa mga tunay na channel sa pananalapi.
Sa palagay ko naiintindihan mo ... Ang mga virtual na bagay, o bilang tinatawag ding mga stub na bagay, ay isang napaka-kapaki-pakinabang na bagay.
At narito ang kahirapan - ang Java ay may static na pag-type. Nangangahulugan ito na upang ReadDatabase
magtalaga ng isang sanggunian sa isang bagay sa isang variable sa halip na isang bagay ng uri VirtualDatabase
, kailangan mong magmana ng klase VirtualDatabase
mula sa RealDatabase
.
Pagkatapos ay lumalabas na ang klase ay may RealDatabase
isang grupo ng mga pribadong pamamaraan at mga variable na nag-iimbak ng mga sanggunian sa iba pang mga tunay na bagay, at hindi ka makakasulat ng isang normal na stub sa ganitong paraan. Sa teorya ito ay mabuti, ngunit sa pagsasagawa ito ay isang patay na dulo.
At narito ang pagliligtas ( maaari mong basahinDynamicProxy
nang mas detalyado ), na lumitaw pabalik sa Java 5. Pinapayagan ka nitong lumikha ng mga virtual na bagay na walang mga reklamo tungkol sa compiler.
Ang ganitong mga virtual na bagay ay tinatawag na mocks (mula sa salitang mock - layout). Nagawa ng Mockito library ang gawain sa mga pangungutya na ito sa hindi pa nagagawang taas. Kaya pala, ang pangalan ng library.
1.3 @ExtendWith annotation
Ang Mockito library ay mahusay na gumagana sa JUnit, maaari pa itong ituring na extension nito.
Mayroong dalawang paraan para paganahin ang Mockito library sa iyong mga unit test. Ang unang paraan ay ang magdagdag ng isang espesyal na anotasyon:
@ExtendWith(MockitoExtension.class)
public class MockitoAnnotationTest {
...
}
Ang pangalawang paraan ay upang paganahin ang trabaho nito sa pamamagitan ng pagtawag sa pamamaraan openMocks()
:
public class MockitoAnnotationTest {
@BeforeEach
public void init() {
MockitoAnnotations.openMocks(this);
}
}
Kadalasan, makikita mo ang unang pagpipilian, ngunit kung minsan ay kapaki-pakinabang na malaman na mayroong pangalawa.
GO TO FULL VERSION