Test de Metodos y Atributos Privados

De Dos Ideas.

Hay situaciones en que nos surge la necesidad de testear código con nivel de acceso privado. La solución para esto es usar Reflection. A continuación vemos un ejemplo.

Test de atributos privados

En el ejemplo, tenemos un constructor que completa atributos Collection privados:

public class Blah {
...
private String unAtributoPrivado;
...
}

Y aquí el test que accede a dichos atributos:

public class BlahTest {
...
@Test
public void test() {
Blah instancia = new Blah();
Field field = instancia.getClass().getDeclaredField("unAtributoPrivado");
field.setAccessible(true);
String unAtributoPrivado = (String) field.get(instancia);
...
}
}

Test de métodos privados

En un ejemplo, tenemos una clase con un método privado que queremos testesar.

public class Blah {
...
private String unMetodoPrivado(String unParametro){
.....
}
...
}

Y el test con el que se prueba el método privado.

public class BlahTest {
...
@Test
private void unMetodoPrivado_conUnParametro_retornaUnaSalida() {
//setUp
Blah instancia = new Blah();
/*Obtenemos el método privado y lo hacemos accesible*/
Method metodoPrivado = instancia.getClass().getDeclaredMethod("unMetodoPrivado", new Class[]{String.class});
metodoPrivado.setAccessible(true);
 
//ejercitamos
/*ejecutamos el método privado*/
String resultado = (String)metodo.invoke(instancia, new Object[]{"argumento1"}));
 
//verificamos
assertEquals("Salida Esperada", resultado);
}
...
}

Ver también