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.
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.
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); } }
Ieșire
Următoarea ieșire arată că testul rulează cu succes utilizând PowerMock cu Mockito.