logo

Abstrakte Klassen ausspionieren oder verspotten

Als abstrakte Klassen werden die mit dem Schlüsselwort abstract deklarierten Klassen bezeichnet, die die abstrakten Methoden enthalten können oder nicht. In Java können abstrakte Klassen nicht instanziiert werden, sie können jedoch in Unterklassen unterteilt werden. Es kann auch statische Felder und statische Methoden haben.

In diesem Abschnitt besprechen wir das Verspotten oder Ausspionieren abstrakter Klassen. Wir werden mehrere Fälle analysieren, in denen abstrakte Klassen mit nicht-abstrakten Methoden getestet wurden.

Um die abstrakten Klassen auszuspionieren oder zu verspotten, müssen wir die folgenden Maven-Abhängigkeiten hinzufügen:

  • JUnit
  • Mockito
  • PowerMock

Alle erforderlichen Abhängigkeiten des Projekts sind unten aufgeführt:

 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 

Die PowerMock-Abhängigkeiten werden nur für den Test benötigt, in dem wir PowerMock verwenden.

Beispiele für verspottende abstrakte Klassen

1. Abstrakte Klasse mit Mockito.spy() ausspionieren

In diesem Beispiel werden wir die abstrakten Klassen mit der Methode Mockito.spy() ausspionieren. Die Methode Mockito.spy() wird verwendet, um eine Spionageinstanz der abstrakten Klasse zu erstellen.

Schritt 1: Erstellen Sie eine abstrakte Klasse mit dem Namen Abstract1_class, die sowohl abstrakte als auch nicht abstrakte Methoden enthält.

Abstract1_class.java

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

Schritt 2: Erstellen Sie einen JUnit-Testfall mit dem Namen Abstract1Test . Es enthält eine Spionageinstanz der abstrakten Klasse.

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

Ausgabe

Die folgende Ausgabe zeigt, dass der Test erfolgreich ausgeführt wird.

wie viele 0 in einer Milliarde
Abstrakte Klassen ausspionieren oder verspotten

Der Nachteil der Verwendung der Methode Mockito.spy() besteht darin, dass sie während der Erstellung der Spionageinstanz den Konstruktor der abstrakten Klasse aufruft. In den meisten Fällen verwendet der Konstruktor externe Abhängigkeiten, die ein Hindernis für die Ausführung unserer Komponententests darstellen können. Diese externen Abhängigkeiten werden üblicherweise als „ Prüfungshindernisse . Aus diesem Grund wird die Methode Mockito.mock() zum Verspotten abstrakter Klassen verwendet.

2. Abstrakte Klasse mit Mockito.mock() verspotten

In diesem Beispiel werden wir die abstrakten Klassen mit der Methode Mockito.mock() verspotten.

Normalerweise wird Mocking verwendet, um einen Klon oder ein Dummy-Objekt der Klasse zu erstellen. Mit anderen Worten: Es macht eine Klasse von ihrer Logik oder ihren Algorithmen frei. Die erstellte Scheininstanz enthält keinen Code (Logik) innerhalb der Methoden.

Schritt 1: Erstellen Sie eine abstrakte Klasse mit dem Namen Abstract_Class, die sowohl abstrakte als auch nicht abstrakte Methoden enthält.

Abstract_Class.java

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

Schritt 2: Erstellen Sie einen JUnit-Testfall mit dem Namen AbstractTestClass für die Verspottung der abstrakten Klasse.

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

Im obigen Code, Und ist eine simulierte Instanz, die mit der Methode Mockito.mock() erstellt wurde.

if else-Anweisung in Java

Ausgabe

Die folgende Ausgabe zeigt, dass der Test mit Mockito erfolgreich ausgeführt wird.

Abstrakte Klassen ausspionieren oder verspotten

Der obige Ansatz ist nicht der beste, kann aber verwendet werden. Der nächste Ansatz wird empfohlen, da er PowerMock verwendet und die Kontrolle über die in den abstrakten Klassen definierten privaten Methoden haben kann.

3. Verspotten einer abstrakten Klasse mit PowerMock

Im folgenden Beispiel verwenden wir die Methode PowerMockito.mock() zum Verspotten der abstrakten Klassen. Die Verwendung von PowerMock anstelle von Mockito.mock() ist ein besserer Ansatz, da damit sowohl die privaten als auch die statischen Methoden kontrolliert werden können.

Schritt 1: Erstellen Sie eine abstrakte Klasse mit dem Namen Abstrakte Klasse das sowohl abstrakte als auch nicht abstrakte Methoden enthält.

Abstract_class.java

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

Schritt 2: Erstellen Sie einen JUnit-Testfall mit dem Namen AbstractTestClass zu Testzwecken.

AbstractTestClass.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); } } 
Hier haben wir PowerMock gebeten, die Rückgabewerte der privaten Methode zu stutzen, damit wir die sayMock()-Methode ohne Testhindernisse testen können. Mockito allein kann diese Methode nicht stoppen, deshalb haben wir PowerMock zusammen mit Mockito verwendet.

Ausgabe

Die folgende Ausgabe zeigt, dass der Test mit PowerMock und Mockito erfolgreich ausgeführt wird.

Abstrakte Klassen ausspionieren oder verspotten