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.
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.
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.