Diferencia entre revisiones de «Test de Metodos y Atributos Privados»

De Dos Ideas.
Saltar a: navegación, buscar
(Página creada con '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. =…')
 
(Ver también)
 
(No se muestran 5 ediciones intermedias de 3 usuarios)
Línea 6: Línea 6:
  
 
<code java>
 
<code java>
...
+
public class Blah {
     private Collection codigosListasPlan;
+
    ...
 
+
     private String unAtributoPrivado;
...
+
    ...
 +
}
 
</code>
 
</code>
  
Línea 15: Línea 16:
  
 
<code java>
 
<code java>
          
+
public class BlahTest {
         Field field = instancia.getClass().getDeclaredField("codigosListasPlan");
+
    ...
 +
    @Test
 +
    public void test() {
 +
         Blah instancia = new Blah();
 +
         Field field = instancia.getClass().getDeclaredField("unAtributoPrivado");
 
         field.setAccessible(true);
 
         field.setAccessible(true);
         Collection codigosListasPlan = (Collection) field.get(instancia);
+
         String unAtributoPrivado = (String) field.get(instancia);
          
+
         ...
         codigosListasPlan.blah();
+
    }
          
+
}       
 +
</code>
 +
 
 +
==Test de métodos privados==
 +
En un ejemplo, tenemos una clase con un método privado que queremos testesar.
 +
 
 +
<code java>
 +
public class Blah {
 +
    ...
 +
    private String unMetodoPrivado(String unParametro){
 +
         .....
 +
    }
 +
    ...
 +
}
 +
</code>
 +
 
 +
Y el test con el que se prueba el método privado.
 +
 
 +
<code java>
 +
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); 
 +
    }
 +
    ...
 +
}
 
</code>
 
</code>
 +
 +
==Ver también==
 +
* [[Prueba Unitaria]]
 +
* [http://www.junit.org Web oficial de JUnit]
 +
* [http://javaboutique.internet.com/tutorials/UnitTesting/ Unit testing Java programs]
 +
* [http://java.sun.com/developer/technicalArticles/ALT/Reflection/ Java Reflection]
 +
[[Category:JUnit]]

Revisión actual del 19:18 25 ago 2010

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