logo

Spiegošanas vai ņirgāšanās abstraktās nodarbības

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
Spiegošanas vai ņirgāšanās abstraktās nodarbības

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.

Spiegošanas vai ņirgāšanās abstraktās nodarbības

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); } } 
Šeit mēs esam lūguši PowerMock bloķēt privātās metodes atgriešanas vērtības, lai mēs varētu pārbaudīt sayMock() metodi bez jebkādiem testa šķēršļiem. Mockito vien nevar novērst šo metodi, tāpēc mēs esam izmantojuši PowerMock kopā ar Mockito.

Izvade

Tālāk redzamā izvade parāda, ka tests veiksmīgi darbojas, izmantojot PowerMock ar Mockito.

Spiegošanas vai ņirgāšanās abstraktās nodarbības