Java >> Java Tutorial >  >> Java

WireMock-Tutorial:Konfiguration

Dieser Blogbeitrag beschreibt, wie wir das zu testende System konfigurieren können, wenn wir WireMock mit JUnit 5 verwenden möchten und keine benutzerdefinierte JUnit 5-Erweiterung verwenden möchten. Nachdem wir diesen Blogbeitrag fertiggestellt haben, werden wir:

  • Verstehen, wie wir den verwendeten WireMock-Server konfigurieren können.
  • Wissen, wie wir den WireMock-Server starten können, bevor eine Testmethode ausgeführt wird.
  • Kann den WireMock-Server stoppen, nachdem eine Testmethode ausgeführt wurde.

Fangen wir an.

Konfigurieren des WireMock-Servers

Wenn wir den WireMock-Server von Grund auf neu konfigurieren möchten, müssen wir einen neuen com.github.tomakehurst.wiremock.WireMockServer erstellen Objekt. Bevor wir dies tun können, müssen wir jedoch eine neue Testklasse erstellen und eine WireMockServer hinzufügen Feld zur erstellten Klasse.

Nachdem wir unsere Testklasse erstellt haben, sieht ihr Quellcode wie folgt aus:

import com.github.tomakehurst.wiremock.WireMockServer;

class WireMockConfigurationTest {
 
 private WireMockServer wireMockServer;
}

Da wir isolierte Testmethoden schreiben wollen, müssen wir dafür sorgen, dass jede Testmethode ihren eigenen WireMockServer bekommt Objekt. Das bedeutet, dass wir den erforderlichen WireMockServer erstellen müssen Objekt in einer Setup-Methode, die aufgerufen wird, bevor eine Testmethode ausgeführt wird.

Nachdem wir diese Setup-Methode zu unserer Testklasse hinzugefügt haben, sieht ihr Quellcode wie folgt aus:

import com.github.tomakehurst.wiremock.WireMockServer;
import org.junit.jupiter.api.BeforeEach;

class WireMockConfigurationTest {

 private WireMockServer wireMockServer;

 @BeforeEach
 void configureSystemUnderTest() {
 //Create and configure the WireMockServer 
 }
}

Als nächstes werfen wir einen Blick auf vier Beispiele, die zeigen, wie wir die gängigsten Konfigurationsoptionen von WireMock verwenden können.

Beispiel 1:Die Standardkonfiguration

Wenn wir die Standardkonfiguration verwenden möchten, können wir einen neuen WireMockServer erstellen Objekt, indem Sie einfach seinen Konstruktor ohne Argumente verwenden. Nachdem wir den erforderlichen WireMockServer erstellt haben Objekt sieht der Quellcode unserer Testklasse wie folgt aus:

import com.github.tomakehurst.wiremock.WireMockServer;
import org.junit.jupiter.api.BeforeEach;

class WireMockConfigurationTest {

 private WireMockServer wireMockServer;

 @BeforeEach
 void configureSystemUnderTest() {
 this.wireMockServer = new WireMockServer();
 }
}

Diese Konfiguration erstellt einen WireMock-Server, der auf alle lokalen IPv4-Adressen (0.0.0.0) und den Port 8080 lauscht.

Wenn wir dem erstellten WireMockServer eine benutzerdefinierte Konfiguration bereitstellen möchten Objekt, müssen wir den Konstruktor verwenden, der einen com.github.tomakehurst.wiremock.core.Options akzeptiert Objekt als Konstruktorargument. Wir können Options neu erstellen Objekte mithilfe der fließenden API, die von com.github.tomakehurst.wiremock.core.WireMockConfiguration bereitgestellt wird Klasse.

Die nächsten drei Beispiele zeigen, wie wir unserem WireMock-Server eine benutzerdefinierte Konfiguration bereitstellen können.

Beispiel 2:Verwenden einer benutzerdefinierten IP-Adresse

Wenn wir die lokale IPv4-Adresse ändern möchten, die vom erstellten WireMock-Server überwacht wird, müssen wir die verwendete IPv4-Adresse mit dem bindAddress() konfigurieren Methode des WireMockConfiguration Klasse. Nachdem wir die gelauschte IPv4-Adresse geändert haben, sieht der Quellcode unserer Testklasse wie folgt aus:

import com.github.tomakehurst.wiremock.WireMockServer;
import org.junit.jupiter.api.BeforeEach;

import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;

class WireMockConfigurationTest {

 private WireMockServer wireMockServer;

 @BeforeEach
 void configureSystemUnderTest() {
 this.wireMockServer = new WireMockServer(options()
 .bindAddress("127.0.0.1")
 );
 }
}

Beispiel 3:Verwenden eines benutzerdefinierten Ports

Wenn wir den Port ändern möchten, der vom erstellten WireMock-Server überwacht wird, müssen wir den neuen Port mithilfe von port() konfigurieren Methode des WireMockConfiguration Klasse. Nachdem wir den überwachten Port geändert haben, sieht der Quellcode unserer Testklasse wie folgt aus:

import com.github.tomakehurst.wiremock.WireMockServer;
import org.junit.jupiter.api.BeforeEach;

import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;

class WireMockConfigurationTest {

 private WireMockServer wireMockServer;

 @BeforeEach
 void configureSystemUnderTest() {
 this.wireMockServer = new WireMockServer(options()
 .port(9090)
 );
 }
}

Beispiel 4:Verwendung eines dynamischen Ports

Wenn wir nicht garantieren können, dass ein bestimmter Port frei ist, wenn wir unsere Tests ausführen, können wir WireMock so konfigurieren, dass es einen freien Port findet, bevor es den WireMock-Server startet. Wir können dies tun, indem wir den dynamicPort() verwenden Methode des WireMockConfiguration Klasse. Nachdem wir WireMock für die Verwendung eines dynamischen Ports konfiguriert haben, sieht der Quellcode unserer Testklasse wie folgt aus:

import com.github.tomakehurst.wiremock.WireMockServer;
import org.junit.jupiter.api.BeforeEach;

import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;

class WireMockConfigurationTest {

 private WireMockServer wireMockServer;

 @BeforeEach
 void configureSystemUnderTest() {
 this.wireMockServer = new WireMockServer(options()
 .dynamicPort()
 );
 }
}

Wir können jetzt die gängigsten Konfigurationsoptionen von WireMock verwenden. Lassen Sie uns weitermachen und herausfinden, wie wir unseren WireMock-Server starten können.

Starten des WireMock-Servers

Bevor wir Tests schreiben können, die WireMock verwenden, müssen wir unseren WireMock-Server starten. Da unsere Konfiguration sicherstellt, dass jede Testmethode einen eigenen WireMock-Server erhält, müssen wir den WireMock-Server in der Setup-Methode starten, die einen neuen WireMockServer erstellt Objekt. Wir können unseren WireMock-Server starten, indem wir den start() aufrufen Methode des WireMockServer Klasse.

Nachdem wir sichergestellt haben, dass unser WireMock-Server gestartet wird, bevor eine Testmethode ausgeführt wird, sieht der Quellcode unserer Testklasse wie folgt aus:

import com.github.tomakehurst.wiremock.WireMockServer;
import org.junit.jupiter.api.BeforeEach;

import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;

class WireMockConfigurationTest {

 private WireMockServer wireMockServer;

 @BeforeEach
 void configureSystemUnderTest() {
 this.wireMockServer = new WireMockServer(options()
 .dynamicPort()
 );
 this.wireMockServer.start();
 }
}

Als nächstes möchte ich eine kurze Anmerkung zur Verwendung des gestarteten WireMock-Servers machen.

Ein kurzer Hinweis zur Verwendung des WireMock-Servers

Obwohl die nächsten Teile meines WireMock-Tutorials beschreiben werden, wie wir Tests schreiben können, die WireMock verwenden, möchte ich auf eine sehr wichtige Sache hinweisen. Nachdem wir unseren WireMock-Server gestartet haben, können wir WireMock verwenden, indem wir eine dieser beiden Optionen verwenden:

Zuerst , können wir die Methoden des WireMockServer verwenden Klasse. Dieser Ansatz funktioniert auch dann, wenn wir die Konfiguration unseres WireMock-Servers geändert haben.

Zweiter , können wir den static verwenden Methoden des WireMock Klasse, die einem WireMock-Server einen Over-the-Wire-Client bereitstellt. Wenn wir jedoch den Host und/oder den Port des gestarteten WireMock-Servers geändert haben und diesen Ansatz verwenden möchten, müssen wir dem Over-the-Wire-Client den neuen Host und/oder Port mithilfe des static configureFor() Methode des WireMock Klasse.

Wenn wir beispielsweise einen dynamischen Port verwenden und den Over-the-Wire-Client verwenden möchten, müssen wir den Port konfigurieren, der von unserem WireMock-Server überwacht wird. Nachdem wir dies getan haben, sieht der Quellcode unserer Testklasse wie folgt aus:

import com.github.tomakehurst.wiremock.WireMockServer;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;

import static com.github.tomakehurst.wiremock.client.WireMock.configureFor;
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;

class WireMockConfigurationTest {

 private WireMockServer wireMockServer;

 @BeforeEach
 void configureSystemUnderTest() {
 this.wireMockServer = new WireMockServer(options()
 .dynamicPort()
 );
 this.wireMockServer.start();
 configureFor(this.wireMockServer.port());
 }
}

Lassen Sie uns weitermachen und herausfinden, wie wir unseren WireMock-Server stoppen können.

Stoppen des WireMock-Servers

Da wir alle reservierten Ressourcen freigeben möchten, bevor eine Testmethode ausgeführt wird, müssen wir unseren WireMock-Server in einer Teardown-Methode stoppen, die ausgeführt wird, nachdem eine Testmethode ausgeführt wurde. Wir können unseren WireMock-Server stoppen, indem wir den stop() aufrufen Methode des WireMockServer Klasse.

Nachdem wir sichergestellt haben, dass unser WireMock-Server nach dem Ausführen einer Testmethode gestoppt wird, sieht der Quellcode unserer Testklasse wie folgt aus:

import com.github.tomakehurst.wiremock.WireMockServer;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;

import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;

class WireMockConfigurationTest {

 private WireMockServer wireMockServer;

 @BeforeEach
 void configureSystemUnderTest() {
 this.wireMockServer = new WireMockServer(options()
 .dynamicPort()
 );
 this.wireMockServer.start();
 }

 @AfterEach
 void stopWireMockServer() {
 this.wireMockServer.stop();
 }
}

Wir können jetzt das zu testende System von Grund auf neu konfigurieren, wenn wir Tests schreiben, die WireMock mit JUnit 5 verwenden. Fassen wir zusammen, was wir aus diesem Blogbeitrag gelernt haben.

Zusammenfassung

Dieser Blogbeitrag hat uns vier Dinge gelehrt:

  • Wir können unseren WireMock-Server konfigurieren, wenn wir einen neuen WireMockServer erstellen Objekt.
  • Wir müssen unseren WireMock-Server in der Setup-Methode starten, die aufgerufen wird, bevor eine Testmethode ausgeführt wird.
  • Wenn wir den Over-the-Wire-Client verwenden möchten, der von WireMock bereitgestellt wird class und wir die Konfiguration unseres WireMock-Servers geändert haben, müssen wir den Over-the-Wire-Client mit static configureFor() konfigurieren Methode des WireMock Klasse.
  • Wir müssen unseren WireMock-Server in der Teardown-Methode stoppen, die aufgerufen wird, nachdem eine Testmethode ausgeführt wurde.

Java-Tag