Por varias razones he tenido que intentar hacer un mock la idea que al invocar al constructor de una clase el objeto obtenido fuera el simulado. Esto lo debía hacer porque ese objeto tenía dependencias externas que no podía sustituir de una forma sencilla. Por lo que debía hacer esto.
La idea muy simplifica sería la expresada en este código.
[java]
package com.davioth.PruebasDeMocks.PowerMock;
public class ClaseMockeada {
public void metodo() {
for (int i = 0; i < 5; i++) {
ClaseIniciada objeto = new ClaseIniciada();
objeto.setPropiedad("Propiedad " + i);
System.out.println(objeto.getPropiedad());
}
}
}
[/java]
La clase que se quiere evitar ejecutar es la siguiente:
como se puede ver lo único que hace es imprimir la propiedad y devolver este valor.
En el siguiente código se muestra lo que he hecho para que a la hora de ejecutar el Test se sustituya el constructor.
En la línea 18 se configura el uso de PowerMock en conjunto con Junit, el la línea 19 se indica que se prepara la clase ClaseMockeada para se un test. Luego en las líneas 24 y 25 creamos un Mock de la clase ClaseIniciada que es iniciada en la línea 29.
El código usado se puede encontrar en este enlace.
Enlaces de Interés.
- Objeto Simulado o Mock en la wikipedia, http://es.wikipedia.org/wiki/Objeto_simulado
- Página de PowerMock, http://code.google.com/p/powermock/
- Proyecto GitHub donde encontrar el código, https://github.com/davioth/PruebaDeMocks.git buscar el Tag, PowerMock_Constructor
- Código alojado en este servidor, Tag de PowerMock de Constructores.