[JAVA] Mockito + PowerMock Spickzettel

Einführung

Versuchen Sie beim Verspotten mit Mockito + PowerMock in einem Java-Komponententest diejenigen, die Sie wahrscheinlich verwenden, so kurz wie möglich zusammenzufassen. (Ich plane, es nach Bedarf hinzuzufügen)

Inhaltsverzeichnis

Stellen Sie Mockito und PowerMock vor

Fügen Sie für Gradle die folgende Abhängigkeit zu build.gradle hinzu.

build.gradle


dependencies {
    testImplementation 'junit:junit:4.12'
    testImplementation "org.mockito:mockito-core:2.28.+"
    testImplementation 'org.powermock:powermock-module-junit4:2.0.2'
    testImplementation 'org.powermock:powermock-api-mockito2:2.0.2'
}

Verspotten Sie statische Methoden

Verspotten wir die statische Methode "ExampleDBA.findAll ()", die von der Methode aufgerufen wird, wenn die folgende Methode getestet wird.

Getestete Klasse


import java.util.List;

public class ExampleLogic {
    public Integer countExamples() {
        List<ExampleDTO> list = ExampleDBA.findAll();
        return list.size();
    }
}

Testklasse


import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
import static org.powermock.api.mockito.PowerMockito.when;

import java.util.Arrays;
import java.util.List;

import org.junit.Before;
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) //(1)
@PrepareForTest({ ExampleDBA.class }) //(2)
public class ExampleLogicTest {

    ExampleLogic logic = new ExampleLogic();

    @Before
    public void setUp() throws Exception {
        PowerMockito.mockStatic(ExampleDBA.class); //(3)
    }

    @Test
    public void countExamples() {
        List<ExampleDTO> result = Arrays.asList(new ExampleDTO());
        when(ExampleDBA.findAll()).thenReturn(result); //(4)
        assertThat(logic.countExamples(), equalTo(1));
    }
}

(1) Es ist eine Magie, die bei der Verwendung von PowerMock erforderlich ist. (2) Geben Sie eine Klasse an, die eine statische Methode zum Verspotten hat. (3) Geben Sie eine Klasse an, die eine statische Methode zum Verspotten hat. (4) Geben Sie den Rückgabewert an, wenn die statische Methode ausgeführt wird.

Verspotten Sie eine neue Instanz

Getestete Klasse


public class ExampleService {
    public Integer count() {
        ExampleLogic logic = new ExampleLogic();
        return logic.countExamples();
    }
}

Testklasse


import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Mockito.mock;
import static org.powermock.api.mockito.PowerMockito.when;
import static org.powermock.api.mockito.PowerMockito.whenNew;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class) //(1)
@PrepareForTest({ ExampleService.class }) //(2)
public class ExampleServiceTest {

    ExampleService service = new ExampleService(); //(3)

    @Test
    public void count() throws Exception {
        ExampleLogic logic = mock(ExampleLogic.class); //(4)
        whenNew(ExampleLogic.class).withNoArguments().thenReturn(logic); //(5)
        when(logic.countExamples()).thenReturn(0); //(6)

        assertThat(service.count(), equalTo(0));
    }
}

(1) Es ist eine Magie, die bei der Verwendung von PowerMock erforderlich ist. (2) Geben Sie die zu testende Klasse an. (3) Erstellen Sie eine Instanz der zu testenden Klasse. (4) Erstellen Sie ein Scheinobjekt. (5) Legen Sie fest, dass ein Scheinobjekt im Neuzustand zurückgegeben wird. (6) Legen Sie den Rückgabewert fest, wenn die Methode des Scheinobjekts aufgerufen wird. (*) Es ist notwendig, (4) bis (6) auszuführen, bevor das zu verspottende Objekt neu erstellt wird. Zum Beispiel, wenn Sie ExampleLogic im Konstruktor von ExampleService neu erstellen ExampleService muss (3) nach (6) stehen.

Verspotten Sie einige Methoden

Getestete Klasse


public class ExampleLogic2 {
    private String privateMethod() {
        return "abc";
    }
    public String publicMethod() {
        String str = privateMethod();
        return str.toUpperCase();
    }
}

Testklasse


import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.powermock.api.mockito.PowerMockito.spy;
import static org.powermock.api.mockito.PowerMockito.when;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class) //(1)
@PrepareForTest(ExampleLogic2.class) //(2)
public class ExampleLogicTest2 {

    @Test
    public void publicMethod() throws Exception {
        ExampleLogic2 logic = spy(new ExampleLogic2()); //(3)
        when(logic, "privateMethod").thenReturn("str"); //(4)
        assertThat(logic.publicMethod(), equalTo("STR"));
    }
}

(1) Es ist eine Magie, die bei der Verwendung von PowerMock erforderlich ist. (2) Geben Sie die zu testende Klasse an. (3) Um einige Methoden zu verspotten, neu die Testzielklasse und den Spion aufrufen. (4) Legen Sie den Rückgabewert der zu verspottenden Methode fest (in diesem Beispiel privat).

Recommended Posts

Mockito + PowerMock Spickzettel
Java Spickzettel
JMeter Spickzettel
Kotlin Spickzettel
[Docker Spickzettel]
Eclipse Sammlungen Cheet Sheet
Schienen Tutorial Cheet Sheet
Spring Boot2 Spickzettel
SCSS Notation Spickzettel
Docker Befehl Spickzettel
Java Stream API Spickzettel
[Eclipse] Shortcut Key Spickzettel
C # Spickzettel für Java-Techniker
Wettbewerbsfähige Programmierung privater Spickzettel (Java)
Javac, Jar, Java Befehl Spickzettel
Ordnungsgemäße Verwendung von Mockito und PowerMock
Technologie zum Lesen des Quellcodes (Cheet Sheet)
[Java] Spickzettel für Datentyp / Zeichenkettenklasse
Grundlegender Spickzettel nach Sprache (Ruby, PHP)