[JAVA] Testen der Sende- und Empfangslogik von Anforderungen mit MockWebServer in JUnit

Ich hatte die Möglichkeit, eine Funktion mithilfe einer externen API in einer Java-Anwendung zu implementieren. Sprechen Sie also über diese Zeit.

Was du machen willst

Wenn Sie die Anforderungs-Sende- / Empfangsverarbeitung neu implementieren, möchten Sie überprüfen, ob die erwartete Operation mit einer festen Antwort ausgeführt wird. Deshalb habe ich mich für eine Bibliothek namens MockWebServer entschieden, um eine feste Antwort zurückzugeben. Dies vereinfacht die logische Überprüfung des anfordernden sendenden und empfangenden Teils.

mockserver.png

Entwicklungsumgebung

Die Java-Umgebung, um diesmal zu versuchen, ist wie folgt.

$ java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

Es wird davon ausgegangen, dass das Build-Tool maven (3.6.0) verwendet.

Wie benutzt man

Fügen Sie die erforderliche Bibliothek zu pom.xml hinzu.

<dependency>
  <groupId>com.squareup.okhttp</groupId>
  <artifactId>mockwebserver</artifactId>
  <version>2.7.5</version>
  <scope>test</scope>
</dependency>

Sie müssen MockWebServer und MockResponse importieren, um sie zu implementieren.

MockWebServer ist eine Klasse, die einen Mechanismus zum Empfangen einer Anforderung und zum Zurückgeben einer Antwort bereitstellt, und MockResponse ist eine Klasse, die zum Definieren eines dedizierten Antwortinhalts verwendet wird.

Zum Ausführen von MockWebServer ist mindestens die folgende Implementierung erforderlich.

import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.MockWebServer;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;

public class QiitaTest {
    
    private MockWebServer mockWebServer;
    
    @Before
    public void setup() throws IOException {
        this.mockWebServer = new MockWebServer();
        this.mockWebServer.start();
    }

    @Test
    public void qiitaTest() {
        String json = "{\"message\": \"Test auf Qiita\"}";
        MockResponse mockResponse = new MockResponse();
        mockResponse.setBody(json);
        mockResponse.setResponseCode(200);
        this.mockWebServer.enqueue(mockResponse);
        
        String mockServerUrl = mockWebServer.url("/").toString();
        // mockServerUrl = http://localhost:59690/
        
        //Schreiben Sie den Anforderungsübertragungsprozess, empfangen Sie die Antwort und schreiben Sie den Testinhalt
    }
}

Um einen Dummy-Server zu starten, erstellen Sie eine Instanz von MockWebServer und rufen Sie die Startmethode auf. Obwohl hier nicht verwendet, ist es möglich, einen Port als Argument des Konstruktors anzugeben. Da für mockWebServer.start () in Throws eine IOException angegeben ist, macht setup (), das als Vorverarbeitung definiert ist, dasselbe.

Dies ermöglicht es, den Prozess des Zuordnens des Antwortinhalts zu einem Objekt unter Verwendung von Jackson usw. mit einer festen Antwort zu überprüfen.

Sie können die normale Verarbeitung wie oben beschrieben versuchen, aber Sie können "setBodyDelay" verwenden, um die Antwort willkürlich zu verzögern.

import import java.util.concurrent.TimeUnit;
...
    @Test
    public void qiitaDelayTest() {
        String json = "{\"message\": \"10 Sekunden zu spät\"}";
        MockResponse mockResponse = new MockResponse();
        mockResponse.setBody(json);
        mockResponse.setBodyDelay(10, TimeUnit.SECONDS);
        mockResponse.setResponseCode(200);
        this.mockWebServer.enqueue(mockResponse);
        ...        
    }

Sie können ein Zeitlimit im Anforderungsübertragungsprozess festlegen und die Fehlerbehandlung versuchen, wenn der Schwellenwert absichtlich überschritten wird.

Im Unit-Test wird der Test ausgeführt, indem explizit json wie folgt erstellt und die Anforderung gesendet wird. Führen Sie jedoch nach dem Start von MockServer hinter den Kulissen die Anwendung aus, die die Anforderung an MockServer weiterleitet. Es ist auch möglich, den Betrieb zu überprüfen.

Schließlich

Dank MockWebServer konnte ich den Vorgang einfach überprüfen, indem ich die Antwort spezifizierte. Da der Testcode selbst unbekannt war, kann es zu Fehlern kommen, aber es war die Methode, als ich die Funktionsweise der Logik über die externe API überprüfte.

Recommended Posts

Testen der Sende- und Empfangslogik von Anforderungen mit MockWebServer in JUnit
Einführung in den Parametrisierungstest in JUnit
Beispielcode für das grundlegende Verspotten und Testen mit Mockito 3 + JUnit 5
Starten Sie die UI-Tests mit Dagger2 und Mockito
Steuern Sie die Testreihenfolge in Junit4 mit einem Aufzählungstyp