logo

Šnipinėjimo ar pasityčiojimo abstrakčios pamokos

Abstrakčios klasės vadinamos klase, deklaruota abstrakčiu raktiniu žodžiu, kuris gali apimti abstrakčiuosius metodus arba jų ne. „Java“ abstrakčių klasių negalima sudaryti, tačiau jas galima suskirstyti į poklasius. Jis taip pat gali turėti statinius laukus ir statinius metodus.

Šiame skyriuje aptarsime abstrakčių klasių tyčiojimąsi ar šnipinėjimą. Išanalizuosime keletą abstrakčių klasių testavimo neabstrakčiais metodais atvejų.

Norėdami šnipinėti ar tyčiotis iš abstrakčių klasių, turime pridėti šias Maven priklausomybes:

tkinter rėmas
  • JUnit
  • Mockito
  • PowerMock

Toliau pateikiamos visos reikalingos projekto priklausomybės:

 junit junit 4.12 test org.mockito mockito-all 1.10.19 test org.powermock powermock-module-junit4 1.7.4 test org.powermock powermock-api-mockito 1.7.0 test 

„PowerMock“ priklausomybės reikalingos tik testui, kuriame naudojame „PowerMock“.

Išjuokimo abstrakčios klasės pavyzdžiai

1. Abstrakčios klasės šnipinėjimas naudojant Mockito.spy()

Šiame pavyzdyje mes ketiname šnipinėti abstrakčias klases naudodami Mockito.spy() metodą. Mockito.spy() metodas naudojamas abstrakčios klasės šnipinėjimo egzemplioriui sukurti.

1 žingsnis: Sukurkite abstrakčią klasę, pavadintą Abstract1_class, kurioje yra ir abstraktūs, ir neabstraktūs metodai.

Santrauka1_klasė.java

 public abstract class Abstract1_class { public abstract int newAbstractmethod(); public String methodUnderTest() { return 'one' ; } } 

2 žingsnis: Sukurkite JUnit bandomąjį atvejį pavadinimu Santrauka1 Testas . Jame yra abstrakčios klasės šnipinėjimo pavyzdys.

Santrauka1Test.java

 import static org.junit.Assert.*; import org.junit.Test; import org.mockito.Mockito; import junit.framework.Assert; public class Abstract1Test { @Test public void testing_usingSpy() { Abstract1_class abstclas = Mockito.spy(Abstract1_class.class); String res = abstclas.methodUnderTest(); Assert.assertEquals('one', res); } } 

Išvestis

mašinraščio foreach kilpa

Ši išvestis rodo, kad testas sėkmingai vykdomas.

Šnipinėjimo ar pasityčiojimo abstrakčios pamokos

Mockito.spy() metodo naudojimo trūkumas yra tas, kad jis iškvies abstrakčiosios klasės konstruktorių kurdamas šnipinėjimo egzempliorių. Daugeliu atvejų konstruktorius naudoja išorines priklausomybes, kurios gali būti kliūtis mūsų vieneto testo vykdymui. Šios išorinės priklausomybės paprastai žinomos kaip bandymo kliūtis . Tai yra priežastis naudoti Mockito.mock() metodą abstrakčių klasių tyčiojimui.

2. Išjuokti abstrakčią klasę naudojant Mockito.mock()

Šiame pavyzdyje mes ketiname tyčiotis iš abstrakčių klasių naudodami Mockito.mock() metodą.

Paprastai tyčiojimasis naudojamas norint sukurti klasės kloną arba netikrą objektą. Kitaip tariant, tai daro klasę laisvą nuo jos logikos ar algoritmų. Sukurtame pavyzdiniame egzemplioriuje metodų viduje nėra kodo (logikos).

1 žingsnis: Sukurkite abstrakčią klasę, pavadintą Abstract_Class, kurioje yra ir abstraktūs, ir neabstraktūs metodai.

Abstract_Class.java

 public abstract class Abstract_Class { public String sayMock() { return 'Hii.. ' + getName() + symbol() ; } private String symbol() { return '!!'; } protected abstract String getName(); } 

2 žingsnis: Sukurkite JUnit bandomąjį atvejį pavadinimu AbstractTestClass už tyčiojimąsi iš abstrakčios klasės.

AbstractTestClass.java

 import static org.junit.Assert.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.junit.Test; public class AbstractTestClass { @Test public void test_AbstractClasses() { Abstract_Class ac = mock(Abstract_Class.class); when(ac.sayMock()).thenCallRealMethod(); when(ac.getName()).thenReturn('Jyotika'); assertEquals('Hii.. Jyotika!!', ac.sayMock()); } } 

Aukščiau pateiktame kode ir yra išjuoktas egzempliorius, sukurtas naudojant Mockito.mock() metodą.

Išvestis

Ši išvestis rodo, kad testas sėkmingai vykdomas naudojant Mockito.

Šnipinėjimo ar pasityčiojimo abstrakčios pamokos

Aukščiau pateiktas metodas nėra geriausias, tačiau jį galima naudoti. Kitas metodas yra rekomenduojamas, nes jis naudoja PowerMock ir gali valdyti privačius metodus, apibrėžtus abstrakčiose klasėse.

3. Išjuokti abstrakčią klasę naudojant PowerMock

Šiame pavyzdyje mes naudosime PowerMockito.mock() metodą abstrakčių klasių tyčiojimui. Naudoti PowerMock vietoj Mockito.mock() yra geresnis būdas, nes jis gali valdyti privačius ir statinius metodus.

1 žingsnis: Sukurkite abstrakčią klasę pavadinimu Abstract_class kuriame yra ir abstrakčių, ir neabstrakčių metodų.

Abstract_class.java

 public abstract class Abstract_Class { public abstract int myAbstractMethod(); public String sayMock() { return getName() + '13' ; } private String getName() { return 'Jyotika'; } } 

2 žingsnis: Sukurkite JUnit bandomąjį atvejį pavadinimu AbstractTestClass bandymo tikslais.

AbstractTestClass.java

velykiniai kiaušiniai android
 import static org.junit.Assert.*; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) @PrepareForTest( Abstract_Class.class) public class AbstractTestClass { @Test public void test_AbstractClassesusing_PowerMock() throws Exception { // given Abstract_Class ac = PowerMockito.mock(Abstract_Class.class); PowerMockito.doCallRealMethod().when(ac).sayMock(); PowerMockito.doReturn('Sharma').when(ac , 'getName'); //when String newstring = ac.sayMock(); //then assertEquals('Sharma13', newstring); System.out.println(newstring); } } 
Čia mes paprašėme „PowerMock“ išjungti privataus metodo grąžinimo reikšmes, kad galėtume išbandyti „sayMock()“ metodą be jokių bandymo kliūčių. Vien tik „Mockito“ šio metodo sugadinti negali, todėl kartu su „Mockito“ naudojome „PowerMock“.

Išvestis

Ši išvestis rodo, kad testas sėkmingai vykdomas naudojant PowerMock su Mockito.

Šnipinėjimo ar tyčiojimosi abstrakčios pamokos