logo

Kémkedés vagy kigúnyolás absztrakt osztályok

Az absztrakt osztályokra úgy hivatkozunk, mint az absztrakt kulcsszóval deklarált osztályokra, amelyek tartalmazhatják vagy nem tartalmazzák az absztrakt metódusokat. A Java-ban az absztrakt osztályok nem példányosíthatók, de alosztályozhatók. Statikus mezői és statikus metódusai is lehetnek.

Ebben a részben az absztrakt osztályok gúnyolódásáról vagy kémkedéséről lesz szó. Elemezzük az absztrakt osztályok nem absztrakt módszerekkel történő tesztelésének több esetét.

Az absztrakt osztályok kémkedéséhez vagy gúnyolásához a következő Maven-függőségeket kell hozzáadnunk:

  • JUnit
  • Mockito
  • PowerMock

A projekt összes szükséges függősége az alábbiakban található:

 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 

A PowerMock-függőségek csak abban a tesztben szükségesek, amelyben a PowerMock-ot használjuk.

Példák gúnyos absztrakt osztályra

1. Absztrakt osztály kémkedése a Mockito.spy() segítségével

Ebben a példában az absztrakt osztályokat a Mockito.spy() metódussal fogjuk kémkedni. A Mockito.spy() metódus az absztrakt osztály kémpéldányának létrehozására szolgál.

1. lépés: Hozzon létre egy Abstract1_class nevű absztrakt osztályt, amely absztrakt és nem absztrakt metódusokat is tartalmaz.

Abstract1_class.java

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

2. lépés: Hozzon létre egy nevű JUnit tesztesetet Absztrakt 1 teszt . Az absztrakt osztály kémpéldányát tartalmazza.

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); } } 

Kimenet

A következő kimenet azt mutatja, hogy a teszt sikeresen fut.

ha else utasítások java
Kémkedés vagy kigúnyolás absztrakt osztályok

A Mockito.spy() metódus használatának hátránya, hogy meghívja az absztrakt osztálykonstruktort a kémpéldány létrehozása során. A legtöbb esetben a konstruktor külső függőségeket használ, amelyek akadályozhatják az egységtesztek végrehajtását. Ezeket a külső függőségeket általában a tesztelési akadályok . Ez az oka annak, hogy a Mockito.mock() metódust használjuk absztrakt osztályok kigúnyolására.

2. Absztrakt osztály kigúnyolása a Mockito.mock() használatával

Ebben a példában az absztrakt osztályokat a Mockito.mock() metódussal fogjuk gúnyolni.

Általában a gúnyolódást az osztály klónjának vagy álobjektumának létrehozására használják. Más szavakkal, egy osztályt megüresít a logikájából vagy az algoritmusaiból. A létrehozott próbapéldány nem tartalmaz kódot (logikát) a metódusokon belül.

1. lépés: Hozzon létre egy Abstract_Class nevű absztrakt osztályt, amely absztrakt és nem absztrakt metódusokat is tartalmaz.

Abstract_Class.java

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

2. lépés: Hozzon létre egy nevű JUnit tesztesetet AbstractTestClass az absztrakt osztály kigúnyolásáért.

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()); } } 

A fenti kódban és a Mockito.mock() metódussal létrehozott gúnyolt példány.

a java nulla

Kimenet

A következő kimenet azt mutatja, hogy a teszt sikeresen fut a Mockito használatával.

Kémkedés vagy kigúnyolás absztrakt osztályok

A fenti megközelítés nem a legjobb, de használható. A következő megközelítést javasoljuk, mert PowerMockot használ, és az absztrakt osztályokban definiált privát metódusokat irányíthatja.

3. Absztrakt osztály kigúnyolása a PowerMock segítségével

A következő példában a PowerMockito.mock() metódust fogjuk használni az absztrakt osztályok gúnyolására. A PowerMock használata a Mockito.mock() helyett jobb megközelítés, mivel a privát és a statikus metódusok felett is vezérelhető.

1. lépés: Hozzon létre egy absztrakt osztályt, melynek neve Absztrakt_osztály amely absztrakt és nem absztrakt módszereket is tartalmaz.

Abstract_class.java

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

2. lépés: Hozzon létre egy nevű JUnit tesztesetet AbstractTestClass tesztelési célokra.

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); } } 
Itt arra kértük a PowerMockot, hogy csonkítsa le a privát metódus visszatérési értékeit, hogy a sayMock() metódust tesztelési akadályok nélkül tesztelhessük. A Mockito önmagában nem tudja elnyomni ezt a módszert, ezért a PowerMockot a Mockitoval együtt alkalmaztuk.

Kimenet

A következő kimenet azt mutatja, hogy a teszt sikeresen fut a PowerMock és a Mockito használatával.

Kémkedés vagy kigúnyolás absztrakt osztályok