logo

PowerMock

PowerMock es un marco Java de código abierto que se utiliza para crear un objeto simulado en pruebas unitarias. Amplía otros marcos simulados como EasyMock y Mockito para mejorar las capacidades. El marco PowerMock utiliza un cargador de clases personalizado y técnicas de manipulación de código de bytes para permitir la burla de métodos estáticos, clases finales, métodos finales, métodos privados, constructores y la eliminación de inicializadores estáticos. El objetivo principal de PowerMock es ampliar las API existentes con algunos métodos y anotaciones para proporcionar funciones adicionales que faciliten las pruebas unitarias.

El marco PowerMock proporciona una clase llamada PowerMockito se utiliza para crear objetos simulados e inicia la verificación y la expectativa. PowerMockito proporciona la funcionalidad para trabajar con la API de reflexión de Java.

Entendamos el concepto de PowerMock con la ayuda de un ejemplo.

Ejemplo de PowerMock con Mockito

Aquí, vamos a crear un ejemplo de PowerMock con los marcos Mockito y JUnit. Para crear un ejemplo usando PowerMock, debemos seguir los siguientes pasos.

Paso 1: Agregue las siguientes dependencias de PowerMock en el archivo pom.xml.

 org.powermock powermock-api-mockito 1.7.0 test org.powermock powermock-module-junit4 1.7.0 test 

Paso 2: Aplicar las anotaciones de PowerMock

Para usar PowerMock con Mockito, debemos aplicar lo siguiente dos anotaciones en la prueba:

@RunWith(PowerMockRunner.clase): Es el mismo que hemos utilizado en nuestros ejemplos anteriores. La única diferencia es que en el ejemplo anterior usamos MockitoUnitRunner.class, ahora usaremos PowerMockRunner.class para habilitar las API de PowerMockito en la prueba.

@PrepareForTest: Le indica a PowerMock que prepare algunas clases para las pruebas. Se puede aplicar tanto a las clases de prueba como a los métodos de prueba individuales. Incluye clases con métodos finales, estáticos, privados o nativos de los que se puede burlar.

 @RunWith(PowerMockRunner.class) @PrepareForTest(Utility.class) public class Powermock_test { } 

Nota: Los dos pasos anteriores son obligatorios para todos los ejemplos que crearemos usando PowerMock.

A continuación se muestran ejemplos de PowerMock con marcos Mockito y JUnit.

1. Burlarse estático métodos

En el siguiente ejemplo, vamos a burlarnos estático métodos.

Paso 1: Crea una clase que contenga un estático método. Hemos creado una clase con el nombre. Utilidad.

Utility.java

 public class Utility { public static String staticMethod(String call) { return call; } } 

Paso 2: Cree un caso de prueba JUnit, llamado prueba_powermock, con fines de prueba.

Powermock_test.java

 import static junit.framework.Assert.assertEquals; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) @PrepareForTest(Utility.class) public class Powermock_test { @Test public void TestStaticMethod_WithPowerMockito() { String call = ' Hi there, I'm using PowerMock with Mockito '; String callexpectation = ' Call Expectation for you. '; PowerMockito.mockStatic(Utility.class); PowerMockito.when(Utility.staticMethod(call)).thenReturn(callexpectation); String actualcall = Utility.staticMethod(call); assertEquals(callexpectation, actualcall); } } 

Producción

El siguiente resultado muestra que la prueba se está ejecutando correctamente.

Ejemplo de PowerMock con Mockito

También podemos verificar que el método estático se llama o no, usando el verificarEstático() método de PowerMockito, como se muestra a continuación.

 PowerMockito.verifyStatic(); Utility.staticMethod(call); 

2. Burlarse privado métodos

En el siguiente ejemplo, crearemos un simulacro de privado métodos.

Paso 1: Crea una clase que contenga un método privado. Hemos creado una clase con el nombre. Utilidad y definió un privado método y un método público (que devuelve el objeto del método privado).

descargar youtube con vlc

Utility.java

 public class Utility { private String privateMethod(String message) { return message; } public String callPrivateMethod(String message) { return privateMethod(message); } } 

Paso 2: Cree un caso de prueba JUnit llamado Prueba_PowerMock con fines de prueba.

Powermock_test.java

 import static junit.framework.Assert.assertEquals; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) @PrepareForTest(Utility.class) public class Powermock_test { @Test public void TestPrivateMethod_WithPowerMock() throws Exception { String message = ' PowerMock with Mockito and JUnit '; String expectedmessage = ' Using with EasyMock '; Utility mock =PowerMockito.spy(new Utility()); PowerMockito.doReturn(expectedmessage).when(mock, 'privateMethod', message); String actualmessage = mock.callPrivateMethod(message); assertEquals(expectedmessage, actualmessage); System.out.println(PowerMockito.verifyPrivate(getClass())); } } 

Producción

El siguiente resultado muestra que la prueba se está ejecutando correctamente.

Ejemplo de PowerMock con Mockito

3. Burlarse final métodos

En el siguiente ejemplo, vamos a burlarnos final métodos.

Paso 1: Crea una clase que contenga un final método. Hemos creado una clase con el nombre Utilidad y definimos un método final llamado finalMethod.

Utility.java

 public class Utility { public final String finalMethod(String message) { return message; } } 

Paso 2: Cree un caso de prueba JUnit llamado prueba_powermock con fines de prueba.

Powermock_test.java

 import static junit.framework.Assert.assertEquals; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) @PrepareForTest(Utility.class) public class Powermock_test { @Test public void TestFinalMethod_WithPowerMock() throws Exception { String message = ' PowerMock with Mockito and JUnit '; Utility uti = PowerMockito.mock(Utility.class); PowerMockito.whenNew(Utility.class).withNoArguments().thenReturn(uti); Utility uti2 = new Utility(); PowerMockito.verifyNew(Utility.class).withNoArguments(); PowerMockito.when(uti2.finalMethod(message)).thenReturn(message); String message2 = uti2.finalMethod(message); Mockito.verify(uti2).finalMethod(message); assertEquals(message, message2); } } 

Producción

El siguiente resultado muestra que la prueba se está ejecutando correctamente.

Ejemplo de PowerMock con Mockito