Abstraktni razredi se imenujejo razredi, deklarirani z abstraktno ključno besedo, ki lahko vključujejo ali ne vključujejo abstraktnih metod. V Javi abstraktnih razredov ni mogoče instancirati, lahko pa so podrazredi. Lahko ima tudi statična polja in statične metode.
V tem razdelku bomo razpravljali o norčevanju ali vohunjenju abstraktnih razredov. Analizirali bomo več primerov testiranja abstraktnih razredov z uporabo neabstraktnih metod.
Za vohunjenje ali norčevanje iz abstraktnih razredov moramo dodati naslednje odvisnosti Maven:
- JUnit
- Mockito
- PowerMock
Vse zahtevane odvisnosti projekta so navedene spodaj:
niz bajtov v niz java
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
Odvisnosti PowerMock so potrebne samo za test, v katerem uporabljamo PowerMock.
Primeri posmehljivega abstraktnega razreda
1. Vohunjenje abstraktnega razreda z uporabo Mockito.spy()
V tem primeru bomo vohunili za abstraktnimi razredi z uporabo metode Mockito.spy(). Metoda Mockito.spy() se uporablja za ustvarjanje vohunskega primerka abstraktnega razreda.
Korak 1: Ustvarite abstraktni razred z imenom Abstract1_class, ki vsebuje abstraktne in neabstraktne metode.
Povzetek1_razred.java
public abstract class Abstract1_class { public abstract int newAbstractmethod(); public String methodUnderTest() { return 'one' ; } }
2. korak: Ustvarite testni primer JUnit z imenom Povzetek1Test . Vsebuje vohunsko instanco abstraktnega razreda.
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); } }
Izhod
Naslednji izhod kaže, da se preizkus uspešno izvaja.
Pomanjkljivost uporabe metode Mockito.spy() je, da bo med ustvarjanjem vohunskega primerka priklicala konstruktor abstraktnega razreda. V večini primerov konstruktor uporablja zunanje odvisnosti, ki so lahko ovira pri izvajanju naših enotnih testov. Te zunanje odvisnosti so običajno znane kot testne ovire . To je razlog za uporabo metode Mockito.mock() za norčevanje iz abstraktnih razredov.
2. Zasmehovanje abstraktnega razreda z uporabo Mockito.mock()
V tem primeru se bomo norčevali iz abstraktnih razredov z uporabo metode Mockito.mock().
dereference kazalec
Običajno se norčevanje uporablja za ustvarjanje klona ali navideznega predmeta razreda. Z drugimi besedami, zaradi svoje logike ali algoritmov izprazni razred. Ustvarjeni lažni primerek ne vsebuje kode (logike) znotraj metod.
jedro java
Korak 1: Ustvarite abstraktni razred z imenom Abstract_Class, ki vsebuje abstraktne in neabstraktne metode.
Abstract_Class.java
public abstract class Abstract_Class { public String sayMock() { return 'Hii.. ' + getName() + symbol() ; } private String symbol() { return '!!'; } protected abstract String getName(); }
2. korak: Ustvarite testni primer JUnit z imenom AbstractTestClass za norčevanje iz abstraktnega razreda.
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()); } }
V zgornji kodi je in je posmehovan primerek, ustvarjen z metodo Mockito.mock().
Izhod
Naslednji izhod kaže, da se preizkus uspešno izvaja z uporabo Mockita.
Zgornji pristop ni najboljši, vendar ga je mogoče uporabiti. Naslednji pristop je priporočljiv, ker uporablja PowerMock in ima lahko nadzor nad zasebnimi metodami, definiranimi v abstraktnih razredih.
3. Posmehovanje abstraktnemu razredu z uporabo PowerMocka
V naslednjem primeru bomo uporabili metodo PowerMockito.mock() za norčevanje iz abstraktnih razredov. Uporaba PowerMocka namesto Mockito.mock() je boljši pristop, saj ima lahko nadzor nad zasebnimi in tudi statičnimi metodami.
Korak 1: Ustvarite abstraktni razred z imenom Abstraktni_razred ki vsebuje abstraktne in neabstraktne metode.
Abstract_class.java
public abstract class Abstract_Class { public abstract int myAbstractMethod(); public String sayMock() { return getName() + '13' ; } private String getName() { return 'Jyotika'; } }
2. korak: Ustvarite testni primer JUnit z imenom AbstractTestClass za namene testiranja.
sončna deol starost
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); } }
Izhod
Naslednji izhod kaže, da se preizkus uspešno izvaja z uporabo PowerMock z Mockito.