WireMock – Stubbing con prueba JUnit

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:

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *