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.
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.
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); } }
Išvestis
Ši išvestis rodo, kad testas sėkmingai vykdomas naudojant PowerMock su Mockito.