Una de las características más importantes de WireMock es Stubbing . Stubbing es la función central de WireMock y tiene la capacidad de devolver respuestas HTTP enlatadas para criterios de coincidencia de requests. Entonces, en este artículo, vamos a ver cómo funciona Stubbing con JUnit Test en WireMock. El marco JUnit es un marco de Java que se usa ampliamente para realizar pruebas. Admite la ejecución de la prueba escribiendo y probando. El marco JUnit se basó inicialmente en el marco SUnit que se usa para las pruebas unitarias, pero luego se actualizó con Java usando Selenium WebDriver. JUnit ahora se usa como estándar cuando necesitamos realizar pruebas en Java.
requisitos previos:
- Consulte este artículo e instale WireMock en su máquina local: ¿Cómo descargar e instalar WireMock?
- ¿Cómo usar WireMock con la prueba JUnit?
Nota: Para realizar Stubbing con JSON, consulte este artículo: WireMock: Stubbing con asignaciones JSON
1. Stubbing básico con prueba JUnit
Sintaxis estándar:
@Test public void stubbingWithJunit() { stubFor(get(urlEqualTo("put your url as per your requirement")) .willReturn(aResponse() .withHeader("Content-Type", "text/plain") .withBody("put your body here"))); assertThat(testClient.get("/some/thing").statusCode(), is(200)); assertThat(testClient.get("/some/thing/else").statusCode(), is(404)); }
Comprendamos el código anterior en detalle con un proyecto de ejemplo adecuado. Usaremos IntelliJ IDEA como IDE y Maven como herramienta de compilación.
Proyecto de ejemplo
Paso 1: Consulte el artículo Cómo crear un proyecto Maven en IntelliJ IDEA y cree un proyecto Maven en IntelliJ IDEA.
Paso 2: agregue las siguientes dependencias en su archivo pom.xml .
<!-- Dependency for okhttp --> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.2.2</version> </dependency> <!-- Dependency for Wiremock--> <dependency> <groupId>com.github.tomakehurst</groupId> <artifactId>wiremock</artifactId> <version>2.27.2</version> <scope>test</scope> </dependency> <!-- Dependency for JUnit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13-rc-2</version> <scope>test</scope> </dependency>
A continuación se muestra el código completo para el archivo pom.xml .
XML
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>wiremock-with-junit</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.2.2</version> </dependency> <dependency> <groupId>com.github.tomakehurst</groupId> <artifactId>wiremock</artifactId> <version>2.27.2</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13-rc-2</version> <scope>test</scope> </dependency> </dependencies> </project>
Paso 3: Ahora ve a src > test > java y crea una clase de prueba llamada WiremockWithJunit . En esta clase, vamos a realizar el Stubbing con JUnit Test. Al principio, tenemos que configurar el stub algo como esto.
private void configStubForPostMethod() { configureFor("localhost", 9090); stubFor(post(urlEqualTo("/testuser")) .willReturn(status(200) .withBody("Welcome TestUser!") .withHeader("content-type", "application/json"))); }
El código se explica por sí mismo, así que consulte el código en profundidad para que pueda entender el código fácilmente. Ahora vamos a crear el cuerpo de la solicitud
RequestBody body = new FormBody.Builder() .add("username", "testuser") .build();
Luego llame a la solicitud en WireMock a través de OkHttpClient.
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://localhost:9090/testuser") .method("POST", body) .build(); Response response = client.newCall(request).execute();
Y finalmente, afirmar la respuesta, y listo.
assertEquals("Welcome TestUser!", response.body().string());
A continuación se muestra el código completo de la clase WiremockWithJunit.java .
Java
import com.github.tomakehurst.wiremock.junit.WireMockRule; import okhttp3.*; import org.junit.Rule; import org.junit.Test; import static com.github.tomakehurst.wiremock.client.WireMock.*; import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig; import static org.junit.Assert.assertEquals; public class WiremockWithJunit { @Rule public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().port(9090)); // Stubbing with JUnit @Test public void stubbing_with_junit_test() throws Exception { // stub configuration configStubForPostMethod(); // Create the Request Body RequestBody body = new FormBody.Builder() .add("username", "testuser") .build(); // call request in WireMock through OkHttpClient OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://localhost:9090/testuser") .method("POST", body) .build(); Response response = client.newCall(request).execute(); // assert the response assertEquals("Welcome TestUser!", response.body().string()); } private void configStubForPostMethod() { configureFor("localhost", 9090); stubFor(post(urlEqualTo("/testuser")) .willReturn(status(200) .withBody("Welcome TestUser!") .withHeader("content-type", "application/json"))); } }
Ahora, hagamos nuestra prueba. Y en la imagen de abajo puede ver que nuestra prueba ha sido aprobada.
2. Configuración del mensaje de estado de respuesta
Además del código de estado, también se puede configurar opcionalmente el mensaje de estado.
Java
@Test public void stubWithJunitstatusMessage() { stubFor(get(urlEqualTo("put your url as per your requirement")) .willReturn(aResponse() .withStatus(200) .withStatusMessage("put your status message here") .withHeader("Content-Type", "text/plain"))); }
3. Envío de encabezados de respuesta
Java
@Test public void stubWithJunitResponseHeader() { stubFor(get(urlEqualTo("put your url as per your requirement")) .willReturn(aResponse() .withStatus(200) .withHeader("Cache-Control", "no-cache"), .withHeader("Content-Type", "text/plain"))); }
4. Guardar talonarios
Las asignaciones de código auxiliar que se han creado se pueden conservar en el directorio de asignaciones llamando al siguiente método
WireMock.saveAllMappings
5. Edición de talones
Las asignaciones de stub existentes se pueden modificar, siempre que se les haya asignado una ID.
Java
// Original Stub wireMockServer.stubFor(get(urlEqualTo("/edit-this")) .withId(id) .willReturn(aResponse() .withBody("Original"))); assertThat(testClient.get("/edit-this").content(), is("Original")); // Editing Stub wireMockServer.editStub(get(urlEqualTo("/edit-this")) .withId(id) .willReturn(aResponse() .withBody("Modified"))); assertThat(testClient.get("/edit-this").content(), is("Modified"));
6. Eliminación de talones
Las asignaciones de código auxiliar se pueden eliminar/eliminar a través de la API de Java de la siguiente manera.
Java
StubMapping stubMapping = stubFor(get(urlEqualTo("/delete-me")) .willReturn(aResponse().withStatus(200))); // Do things with the stub removeStub(stubMapping);
Publicación traducida automáticamente
Artículo escrito por AmiyaRanjanRout y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA