java - Método privado de prueba usando simulacro de poder que devuelve la lista de enteros
easymock powermock (4)
Tengo un método privado que toma una lista de valores enteros y me devuelve una lista de valores enteros. ¿Cómo puedo usar el poder simulado para probarlo. Soy nuevo en powermock. ¿Puedo hacer la prueba con un simulacro fácil ...? cómo..
Aquí hay un ejemplo completo de cómo hacerlo:
import java.util.ArrayList;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import org.powermock.reflect.Whitebox;
class TestClass {
private List<Integer> methodCall(int num) {
System.out.println("Call methodCall num: " + num);
List<Integer> result = new ArrayList<>(num);
for (int i = 0; i < num; i++) {
result.add(new Integer(i));
}
return result;
}
}
@Test
public void testPrivateMethodCall() throws Exception {
int n = 10;
List result = Whitebox.invokeMethod(new TestClass(), "methodCall", n);
Assert.assertEquals(n, result.size());
}
Cuando quieres probar un método privado con Powermockito y este método privado tiene sintaxis:
private int/void testmeMethod(CustomClass[] params){
....
}
en su método de clase de prueba:
CustomClass [] params = new CustomClass [] {...} WhiteboxImpl.invokeMethod (spy, "testmeMethod", params)
no funcionará debido a los params. aparece un mensaje de error que testmeMethod con los argumentos no existe. Mira aquí:
Clase WhiteboxImpl
public static synchronized <T> T invokeMethod(Object tested, String methodToExecute, Object... arguments)
throws Exception {
return (T) doInvokeMethod(tested, null, methodToExecute, arguments);
}
Para argumentos de tipo Array, PowerMock está desordenado. Así que modifica esto en tu método de prueba para:
WhiteboxImpl.invokeMethod(spy,"testmeMethod",(Object) params)
No tienes este problema para los métodos privados sin parámetros. Como puedo recordar, funciona para los parámetros de tipo Primitve tipo y clase contenedora.
"Comprender TDD es entender Ingeniería de Software"
De la documentación , en la sección llamada "Comunes - Bypass encapsulación":
Utilice Whitebox.invokeMethod (..) para invocar un método privado de una instancia o clase.
También puedes encontrar ejemplos en la misma sección.
Whitebox.invokeMethod(myClassToBeTestedInstance, "theMethodToTest", expectedFooValue);