logo

Špehovanie alebo zosmiešňovanie abstraktných tried

Abstraktné triedy sa označujú ako trieda deklarovaná kľúčovým slovom abstract, ktoré môže alebo nemusí obsahovať abstraktné metódy. V jazyku Java nie je možné vytvárať inštancie abstraktných tried, ale je možné ich podtriediť. Môže mať aj statické polia a statické metódy.

V tejto časti budeme diskutovať o zosmiešňovaní alebo špehovaní abstraktných tried. Budeme analyzovať niekoľko prípadov testovania abstraktných tried pomocou neabstraktných metód.

Na špehovanie alebo zosmiešňovanie abstraktných tried musíme pridať nasledujúce závislosti Maven:

symetrický rozdiel
  • JUnit
  • Mockito
  • PowerMock

Všetky požadované závislosti projektu sú uvedené nižšie:

 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 

Závislosti PowerMock sú potrebné len pre test, v ktorom používame PowerMock.

Príklady zosmiešňovania abstraktnej triedy

1. Špehovanie abstraktnej triedy pomocou Mockito.spy()

V tomto príklade budeme špehovať abstraktné triedy pomocou metódy Mockito.spy(). Metóda Mockito.spy() sa používa na vytvorenie špionážnej inštancie abstraktnej triedy.

Krok 1: Vytvorte abstraktnú triedu s názvom Abstract1_class, ktorá obsahuje abstraktné aj neabstraktné metódy.

Abstract1_class.java

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

Krok 2: Vytvorte testovací prípad JUnit s názvom Abstrakt1 Test . Obsahuje špionážnu inštanciu abstraktnej triedy.

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

Výkon

java konštanta

Nasledujúci výstup ukazuje, že test prebieha úspešne.

Špehovanie alebo zosmiešňovanie abstraktných tried

Nevýhodou použitia metódy Mockito.spy() je, že pri vytváraní špionážnej inštancie vyvolá konštruktor abstraktnej triedy. Vo väčšine prípadov používa konštruktor externé závislosti, ktoré môžu byť prekážkou pri vykonávaní našich testov jednotiek. Tieto externé závislosti sú zvyčajne známe ako testovacie prekážky . To je dôvod, prečo použiť metódu Mockito.mock() na zosmiešňovanie abstraktných tried.

2. Zosmiešňovanie abstraktnej triedy pomocou Mockito.mock()

V tomto príklade sa pokúsime zosmiešniť abstraktné triedy pomocou metódy Mockito.mock().

foreach java

Zvyčajne sa zosmiešňovanie používa na vytvorenie klonu alebo fiktívneho objektu triedy. Inými slovami, uvoľňuje triedu z jej logiky alebo algoritmov. Vytvorená falošná inštancia neobsahuje kód (logiku) vo vnútri metód.

Krok 1: Vytvorte abstraktnú triedu s názvom Abstract_Class, ktorá obsahuje abstraktné aj neabstraktné metódy.

Abstract_Class.java

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

Krok 2: Vytvorte testovací prípad JUnit s názvom AbstractTestClass za zosmiešňovanie abstraktnej triedy.

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

Vo vyššie uvedenom kóde a je zosmiešňovaná inštancia vytvorená pomocou metódy Mockito.mock().

Výkon

Nasledujúci výstup ukazuje, že test úspešne prebieha pomocou Mockito.

Špehovanie alebo zosmiešňovanie abstraktných tried

Vyššie uvedený prístup nie je najlepší, ale dá sa použiť. Ďalší prístup sa odporúča, pretože používa PowerMock a môže mať kontrolu nad súkromnými metódami definovanými v abstraktných triedach.

java matematika

3. Zosmiešňovanie abstraktnej triedy pomocou PowerMock

V nasledujúcom príklade použijeme metódu PowerMockito.mock() na zosmiešňovanie abstraktných tried. Použitie PowerMock namiesto Mockito.mock() je lepší prístup, pretože môže mať kontrolu nad súkromnými aj statickými metódami.

Krok 1: Vytvorte abstraktnú triedu s názvom Abstract_class ktorý obsahuje abstraktné aj neabstraktné metódy.

Abstract_class.java

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

Krok 2: Vytvorte testovací prípad JUnit s názvom AbstractTestClass na testovacie účely.

AbstractTestClass.java

poznámky pod čiarou
 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); } } 
Tu sme požiadali PowerMock, aby zablokoval návratové hodnoty súkromnej metódy, aby sme mohli testovať metódu sayMock() bez akýchkoľvek testovacích prekážok. Samotné Mockito nedokáže túto metódu utlmiť, preto sme spolu s Mockitom použili PowerMock.

Výkon

Nasledujúci výstup ukazuje, že test úspešne prebieha pomocou PowerMock s Mockito.

Špehovanie alebo zosmiešňovanie abstraktných tried