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
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.
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); } }
Kimenet
A következő kimenet azt mutatja, hogy a teszt sikeresen fut a PowerMock és a Mockito használatával.