Klasy abstrakcyjne to klasy zadeklarowane za pomocą słowa kluczowego streszczenie, które mogą zawierać metody abstrakcyjne lub nie. W Javie nie można tworzyć instancji klas abstrakcyjnych, ale można je tworzyć podklasy. Może mieć również pola statyczne i metody statyczne.
fmovies Indie
W tej sekcji omówimy kpienie lub szpiegowanie klas abstrakcyjnych. Przeanalizujemy kilka przypadków testowania klas abstrakcyjnych metodami nieabstrakcyjnymi.
Aby szpiegować lub kpić z klas abstrakcyjnych, musimy dodać następujące zależności Mavena:
- JUnit
- Mockito
- PowerMock
Wszystkie wymagane zależności projektu podano poniżej:
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
Zależności PowerMock są wymagane tylko w przypadku testu, w którym korzystamy z PowerMock.
Przykłady drwiącej klasy abstrakcyjnej
1. Klasa abstrakcyjna szpiegowania przy użyciu Mockito.spy()
W tym przykładzie będziemy szpiegować klasy abstrakcyjne za pomocą metody Mockito.spy(). Metoda Mockito.spy() służy do tworzenia instancji szpiegowskiej klasy abstrakcyjnej.
Krok 1: Utwórz klasę abstrakcyjną o nazwie Abstract1_class, która zawiera zarówno metody abstrakcyjne, jak i nieabstrakcyjne.
Abstract1_class.java
public abstract class Abstract1_class { public abstract int newAbstractmethod(); public String methodUnderTest() { return 'one' ; } }
Krok 2: Utwórz przypadek testowy JUnit o nazwie Streszczenie1Test . Zawiera instancję szpiegowską klasy abstrakcyjnej.
ciąg.format
Streszczenie1Test.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); } }
Wyjście
Poniższe dane wyjściowe pokazują, że test został pomyślnie uruchomiony.
Wadą stosowania metody Mockito.spy() jest to, że podczas tworzenia instancji spy wywołuje ona konstruktor klasy abstrakcyjnej. W większości przypadków konstruktor wykorzystuje zależności zewnętrzne, które mogą stanowić przeszkodę w wykonaniu naszych testów jednostkowych. Te zależności zewnętrzne są zwykle znane jako przeszkody testowe . Jest to powód, aby używać metody Mockito.mock() do kpin z klas abstrakcyjnych.
2. Wyśmiewanie klasy abstrakcyjnej za pomocą Mockito.mock()
W tym przykładzie będziemy kpić z klas abstrakcyjnych za pomocą metody Mockito.mock().
Zwykle drwina służy do tworzenia klona lub fikcyjnego obiektu klasy. Innymi słowy, sprawia, że klasa staje się wolna od swojej logiki lub algorytmów. Utworzona instancja próbna nie zawiera kodu (logiki) wewnątrz metod.
Krok 1: Utwórz klasę abstrakcyjną o nazwie Abstract_Class, która zawiera zarówno metody abstrakcyjne, jak i nieabstrakcyjne.
wyrównaj obraz za pomocą CSS
Klasa_abstrakcyjna.java
public abstract class Abstract_Class { public String sayMock() { return 'Hii.. ' + getName() + symbol() ; } private String symbol() { return '!!'; } protected abstract String getName(); }
Krok 2: Utwórz przypadek testowy JUnit o nazwie Klasa testu abstrakcyjnego za kpinę z klasy abstrakcyjnej.
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()); } }
W powyższym kodzie I to wyśmiewana instancja utworzona przy użyciu metody Mockito.mock().
Wyjście
rysowanie prostokąta w gimp
Poniższe dane wyjściowe pokazują, że test został pomyślnie uruchomiony przy użyciu Mockito.
Powyższe podejście nie jest najlepsze, ale można je zastosować. Zalecane jest następne podejście, ponieważ wykorzystuje PowerMock i może mieć kontrolę nad prywatnymi metodami zdefiniowanymi w klasach abstrakcyjnych.
3. Wyśmiewanie klasy abstrakcyjnej za pomocą PowerMock
W poniższym przykładzie użyjemy metody PowerMockito.mock() do kpiny z klas abstrakcyjnych. Lepszym podejściem jest użycie PowerMock zamiast Mockito.mock(), ponieważ umożliwia kontrolę zarówno nad metodami prywatnymi, jak i statycznymi.
Krok 1: Utwórz klasę abstrakcyjną o nazwie Klasa_abstrakcyjna który zawiera zarówno metody abstrakcyjne, jak i nieabstrakcyjne.
Klasa_abstrakcyjna.java
public abstract class Abstract_Class { public abstract int myAbstractMethod(); public String sayMock() { return getName() + '13' ; } private String getName() { return 'Jyotika'; } }
Krok 2: Utwórz przypadek testowy JUnit o nazwie Klasa testu abstrakcyjnego do celów testowych.
AbstractTestClass.java
1 z 1000,00
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); } }
Wyjście
Poniższe dane wyjściowe pokazują, że test został pomyślnie uruchomiony przy użyciu PowerMock z Mockito.