logo

Cursuri abstracte de spionaj sau batjocură

Clasele abstracte sunt denumite clasa declarată cu cuvântul cheie abstract care poate include sau nu metodele abstracte. În Java, clasele abstracte nu pot fi instanțiate, dar pot fi subclasate. Poate avea, de asemenea, câmpuri statice și metode statice.

În această secțiune, vom discuta despre batjocura sau spionajul claselor abstracte. Vom analiza mai multe cazuri de testare a claselor abstracte folosind metode non-abstracte.

Pentru spionarea sau batjocorirea claselor abstracte, trebuie să adăugăm următoarele dependențe Maven:

  • JUnit
  • Mockito
  • PowerMock

Toate dependențele necesare ale proiectului sunt prezentate mai jos:

 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 

Dependențele PowerMock sunt necesare doar pentru testul în care folosim PowerMock.

Exemple de clasa Mocking Abstract

1. Spionarea clasei abstracte folosind Mockito.spy()

În acest exemplu, vom spiona clasele abstracte folosind metoda Mockito.spy(). Metoda Mockito.spy() este folosită pentru a crea o instanță spion a clasei abstracte.

cate orase este in Statele Unite

Pasul 1: Creați o clasă abstractă numită Abstract1_class care conține atât metode abstracte, cât și non-abstracte.

Abstract1_class.java

introduceți gestionarea excepțiilor java
 public abstract class Abstract1_class { public abstract int newAbstractmethod(); public String methodUnderTest() { return 'one' ; } } 

Pasul 2: Creați un caz de testare JUnit numit Rezumat1Test . Conține o instanță spion a clasei abstracte.

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

Ieșire

Următoarea ieșire arată că testul rulează cu succes.

Cursuri abstracte de spionaj sau batjocură

Dezavantajul utilizării metodei Mockito.spy() este că va invoca constructorul de clasă abstractă în timpul creării instanței spion. În majoritatea cazurilor, constructorul folosește dependențe externe care pot fi un obstacol în calea execuțiilor noastre de test unitar. Aceste dependențe externe sunt de obicei cunoscute ca impedimente de testare . Acesta este motivul pentru a folosi metoda Mockito.mock() pentru a batjocori clasele abstracte.

2. Batjocorirea clasei abstracte folosind Mockito.mock()

În acest exemplu, vom bate joc de clasele abstracte folosind metoda Mockito.mock().

sistem de operare linux

De obicei, batjocura este folosită pentru a crea o clonă sau un obiect fals al clasei. Cu alte cuvinte, face o clasă liberă din logica sau algoritmii ei. Instanța simulată creată nu conține cod (logică) în interiorul metodelor.

Pasul 1: Creați o clasă abstractă numită Abstract_Class care conține atât metode abstracte, cât și non-abstracte.

Abstract_Class.java

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

Pasul 2: Creați un caz de testare JUnit numit AbstractTestClass pentru batjocorirea clasei abstracte.

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

În codul de mai sus, și este o instanță batjocorită creată folosind metoda Mockito.mock().

exemple de programare python

Ieșire

Următoarea ieșire arată că testul rulează cu succes folosind Mockito.

Cursuri abstracte de spionaj sau batjocură

Abordarea de mai sus nu este cea mai bună, dar poate fi folosită. Următoarea abordare este recomandată deoarece folosește PowerMock și poate avea control asupra metodelor private definite în clasele abstracte.

3. Batjocorirea clasei abstracte folosind PowerMock

În exemplul următor, vom folosi metoda PowerMockito.mock() pentru a bate joc de clasele abstracte. Utilizarea PowerMock în loc de Mockito.mock() este o abordare mai bună, deoarece poate avea control asupra metodelor private și statice.

Pasul 1: Creați o clasă abstractă numită Clasa_abstractă care conține atât metode abstracte, cât și non-abstracte.

Abstract_class.java

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

Pasul 2: Creați un caz de testare JUnit numit AbstractTestClass în scop de testare.

AbstractTestClass.java

stive de 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); } } 
Aici, i-am cerut PowerMock să blocheze valorile returnate ale metodei private, astfel încât să putem testa metoda sayMock() fără niciun impediment de testare. Mockito singur nu poate opri această metodă, de aceea am folosit PowerMock împreună cu Mockito.

Ieșire

Următoarea ieșire arată că testul rulează cu succes utilizând PowerMock cu Mockito.

Cursuri abstracte de spionaj sau batjocură