Abstraktās klases tiek sauktas par klasi, kas deklarēta ar abstraktu atslēgvārdu, kas var ietvert vai nevar ietvert abstraktās metodes. Java valodā abstraktās klases nevar izveidot, taču tās var iedalīt apakšklasēs. Tam var būt arī statiski lauki un statiskas metodes.
Šajā sadaļā mēs apspriedīsim abstraktu nodarbību ņirgāšanos vai spiegošanu. Mēs analizēsim vairākus abstrakto klašu testēšanas gadījumus, izmantojot neabstraktās metodes.
funkcijas c
Lai izspiegotu vai ņirgātos par abstraktajām klasēm, mums jāpievieno šādas Maven atkarības:
- JUnit
- Mockito
- PowerMock
Visas nepieciešamās projekta atkarības ir norādītas zemāk:
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 atkarības ir nepieciešamas tikai testam, kurā mēs izmantojam PowerMock.
Izsmejošas abstraktās klases piemēri
1. Abstraktās klases izspiegošana, izmantojot Mockito.spy()
Šajā piemērā mēs izspiegosim abstraktās klases, izmantojot Mockito.spy() metodi. Metode Mockito.spy() tiek izmantota, lai izveidotu abstraktās klases spiegošanas gadījumu.
1. darbība: Izveidojiet abstraktu klasi ar nosaukumu Abstract1_class, kas satur gan abstraktas, gan neabstraktas metodes.
Abstract1_class.java
public abstract class Abstract1_class { public abstract int newAbstractmethod(); public String methodUnderTest() { return 'one' ; } }
2. darbība: Izveidojiet JUnit testa gadījumu ar nosaukumu Abstract1Test . Tajā ir ietverts abstraktās klases spiegošanas gadījums.
Abstract1Test.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); } }
Izvade
Nākamā izvade parāda, ka tests ir veiksmīgi izpildīts.
niecīgs vidējais
Metodes Mockito.spy() izmantošanas trūkums ir tāds, ka spiegošanas instances izveides laikā tā izsauks abstraktās klases konstruktoru. Vairumā gadījumu konstruktors izmanto ārējas atkarības, kas var būt šķērslis mūsu vienības testa izpildei. Šīs ārējās atkarības parasti sauc par pārbaudes šķēršļi . Tas ir iemesls, lai izmantotu Mockito.mock() metodi, lai izsmietu abstraktās klases.
2. Izsmiet abstrakto klasi, izmantojot Mockito.mock()
Šajā piemērā mēs izsmēsim abstraktās klases, izmantojot metodi Mockito.mock().
Parasti ņirgāšanos izmanto, lai izveidotu klases klonu vai fiktīvu objektu. Citiem vārdiem sakot, tas padara klasi brīvu no tās loģikas vai algoritmiem. Izveidotajā izspēles instancē metožu iekšpusē nav koda (loģikas).
1. darbība: Izveidojiet abstraktu klasi ar nosaukumu Abstract_Class, kas satur gan abstraktas, gan neabstraktas metodes.
Abstract_Class.java
public abstract class Abstract_Class { public String sayMock() { return 'Hii.. ' + getName() + symbol() ; } private String symbol() { return '!!'; } protected abstract String getName(); }
2. darbība: Izveidojiet JUnit testa gadījumu ar nosaukumu AbstractTestClass par ņirgāšanos par abstrakto šķiru.
ASV pilsētu nosaukumi
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()); } }
Iepriekš minētajā kodā un ir izsmiets gadījums, kas izveidots, izmantojot metodi Mockito.mock().
Izvade
Sekojošā izvade parāda, ka tests veiksmīgi darbojas, izmantojot Mockito.
Iepriekš minētā pieeja nav labākā, taču to var izmantot. Nākamā pieeja ir ieteicama, jo tā izmanto PowerMock un var kontrolēt privātās metodes, kas definētas abstraktajās klasēs.
3. Abstraktās klases ņirgāšanās, izmantojot PowerMock
Nākamajā piemērā mēs izmantosim PowerMockito.mock() metodi, lai izsmietu abstraktās klases. PowerMock izmantošana Mockito.mock() vietā ir labāka pieeja, jo tā var kontrolēt gan privātās, gan statiskās metodes.
1. darbība: Izveidojiet abstraktu klasi ar nosaukumu Abstract_class kas satur gan abstraktas, gan neabstraktas metodes.
java inicializācijas masīvs
Abstract_class.java
public abstract class Abstract_Class { public abstract int myAbstractMethod(); public String sayMock() { return getName() + '13' ; } private String getName() { return 'Jyotika'; } }
2. darbība: Izveidojiet JUnit testa gadījumu ar nosaukumu AbstractTestClass testēšanas nolūkos.
AbstractTestClass.java
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); } }
Izvade
Tālāk redzamā izvade parāda, ka tests veiksmīgi darbojas, izmantojot PowerMock ar Mockito.