logo

Vohunjenje ali norčevanje iz abstraktnih razredov

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.

Vohunjenje ali norčevanje iz abstraktnih razredov

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.

Vohunjenje ali norčevanje iz abstraktnih razredov

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); } } 
Tukaj smo od PowerMocka zahtevali, da zavrne vrnjene vrednosti zasebne metode, tako da lahko preizkusimo metodo sayMock() brez kakršnih koli testnih ovir. Mockito sam ne more zapreti te metode, zato smo PowerMock uporabili skupaj z Mockitom.

Izhod

Naslednji izhod kaže, da se preizkus uspešno izvaja z uporabo PowerMock z Mockito.

Vohunjenje ali norčevanje iz abstraktnih razredov