Diferencia entre revisiones de «Test de Metodos y Atributos Privados»
De Dos Ideas.
								
												
				|  (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  | + |     ... | 
| − | + |      private String unAtributoPrivado; | |
| − | ... | + |     ... | 
| + | } | ||
| </code> | </code> | ||
| Línea 15: | Línea 16: | ||
| <code java> | <code java> | ||
| − | + | public class BlahTest { | |
| − |          Field field = instancia.getClass().getDeclaredField(" | + |     ... | 
| + |     @Test | ||
| + |     public void test() { | ||
| + |          Blah instancia = new Blah(); | ||
| + |          Field field = instancia.getClass().getDeclaredField("unAtributoPrivado"); | ||
|          field.setAccessible(true); |          field.setAccessible(true); | ||
| − | + |          String unAtributoPrivado = (String) field.get(instancia); | |
| − | + |          ... | |
| − | + |     } | |
| − | + | }         | |
| + | </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);  
   }
   ...
}
