¿Cómo usar WireMock con la prueba JUnit?

WireMock es una herramienta para simular API basadas en HTTP que se ejecuta en las pruebas unitarias, en el escritorio o en el entorno de prueba. También podemos decir que es un simulador de APIs basadas en HTTP, considerado una herramienta de virtualización de servicios o un servidor simulado . Le permite mantenerse productivo cuando una API de la que depende no existe y no está completa o es costosa de acceder. Admite la prueba de casos Edge y modos de falla. Es rápido, por lo que reduce significativamente el tiempo de construcción. En términos simples, Wiremock es una configuración simulada para pruebas de integración . Se utiliza principalmente durante el desarrollo y, de manera más significativa, durante las pruebas de integración, mientras que un sistema o servicio se comunica con una o varias dependencias/servicios externos o internos.

Lea más sobre WireMock en este artículo: Introducción a WireMock

En este artículo, vamos a utilizar WireMock con JUnit Test. 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.

Implementación paso a paso 

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 la prueba JUnit usando WireMock. Primero, consulte el código completo y luego entenderemos el código en detalle.

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));
  
    // WireMock with JUnit
    @Test
    public void wiremock_with_junit_test() throws Exception {
        // stub configuration
        configStub();
  
        // call request in WireMock through OkHttpClient
        OkHttpClient client = new OkHttpClient().newBuilder()
                .build();
        Request request = new Request.Builder()
                .url("http://localhost:9090/gfg/article1")
                .method("GET", null)
                .build();
  
        Response response = client.newCall(request).execute();
  
        // assert the response
        assertEquals("Welcome to GeeksforGeeks!!", response.body().string());
    }
  
    private void configStub() {
        configureFor("localhost", 9090);
        // create a stub
        stubFor(get(urlEqualTo("/gfg/article1")).willReturn(aResponse().withBody("Welcome to GeeksforGeeks!!")));
    }
   
}

Explicación: una regla no es más que un concepto en JUnit que en realidad combina métodos de configuración de prueba como @Before y @After. Y WireMock por defecto proporciona una regla para JUnit llamada WireMockRule. 

@Rule
public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().port(9090));

Luego definimos un método wiremock_with_junit_test() y lo anotamos con la anotación @Test. Porque este es el método que vamos a probar. Y dentro de este método, vamos a realizar las siguientes 3 tareas

  • Arreglar
  • Acto
  • Afirmar

Organizar: Al principio, configuramos el código auxiliar en el método configStub(). Consulte el fragmento de código siguiente. 

private void configStub() {
        configureFor("localhost", 9090);
        // create a stub
        stubFor(get(urlEqualTo("/gfg/article1")).willReturn(aResponse().withBody("Welcome to GeeksforGeeks!!")));
    }

Acto: Luego llamamos a la solicitud en WireMock a través de OkHttpClient. Consulte el fragmento de código siguiente. 

OkHttpClient client = new OkHttpClient().newBuilder().build();
Request request = new Request.Builder()
                .url("http://localhost:9090/gfg/article1")
                .method("GET", null)
                .build();
Response response = client.newCall(request).execute();

Afirmar: Aquí afirmaremos la respuesta. Consulte el fragmento de código siguiente. 

assertEquals("Welcome to GeeksforGeeks!!", response.body().string());

Ahora, probemos el método. 

Salida: Caso de Éxito

 

Y puede ver Test Passed en este caso. Tengamos un escenario con un caso de falla.

Salida: Caso de falla

Ahora cambiemos el valor esperado a algo como esto. También puede cambiar el valor real. 

assertEquals("Welcome to Hello World!!", response.body().string());

Y en la salida, puede ver Prueba fallida con el motivo. 

 

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 *