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); } ...
}