logo

Szpiegowanie lub kpienie z klas abstrakcyjnych

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.

Szpiegowanie lub kpienie z klas abstrakcyjnych

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.

Szpiegowanie lub kpienie z klas abstrakcyjnych

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); } } 
W tym przypadku poprosiliśmy PowerMock o odcięcie wartości zwracanych przez metodę prywatną, abyśmy mogli przetestować metodę sayMock() bez żadnych przeszkód testowych. Sam Mockito nie może zablokować tej metody, dlatego użyliśmy PowerMock wraz z Mockito.

Wyjście

Poniższe dane wyjściowe pokazują, że test został pomyślnie uruchomiony przy użyciu PowerMock z Mockito.

Szpiegowanie lub kpienie z klas abstrakcyjnych