Test de Metodos y Atributos Privados

De Dos Ideas.
Revisión del 19:18 25 ago 2010 de 190.191.242.50 (discusión) (Ver también)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

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