Está en la página 1de 6

ESTRUCTURA

A continuacin se presentar la estructura interna de JUnit, y se describirn las principales clases y mtodos que contiene el framework.

Diagrama de Clases Bsico de JUnit

Clase de Test Una clase de test contiene pruebas del comportamiendo de otra clase, objeto o mtodo. La clase que contiene estas pruebas o tests slo debe cumplir unas reglas sencillas para que JUnit la reconozca como tal, y ejecute automticamente todos los mtodos de prueba que sta contiene. Las reglas son: La clase debe ser una subclase de TestCase (clusula extends TestCase) Un test para JUnit es todo mtodo con la anotacin '@Test'. Los mtodos de test debe ser tipo 'void'. Ejemplo: public class LinkedListTest extends TestCase{ @Test public void testCount() { Object archivo1 = new Archivo("1", "/1", "txt"); Object archivo2 = new Archivo("2", "/2", "txt"); Object archivo3 = new Archivo("3", "/3", "txt"); LinkedList lista = new LinkedList(); lista.add(archivo1); lista.add(archivo2); lista.add(archivo3); int cantidadEsperada = 3; int cantidadResultado = lista.count(); assertEquals(cantidadEsperada, cantidadObtenida); } }

Podemos observar que dentro de testCount() hay una llamada al mtodo assertEquals(). Este mtodo comprueba si la primera expresin que se le pasa como argumento (cantidadEsperada) es igual a la segunda (cantidadObtenida), y trasmite el resultado a JUnit. De esta forma, al terminar la ejecucin de todos los tests, JUnit nos informa de aquellos que se han ejecutado correctamente y de aquellos que han producido algn error.

La ejecucin de un test puede acabar de cuatro formas: Con la validacion correcta de todos los asserts. Esto es lo que esperado. Lanzando uno a varios FailedAssertionError con su informacion asociada. Esto ocurre si alguno de los assert no ha sido vlido, es decir, que la ejecucin de nuestro cdigo no ha devuelto el resultado esperado. Lanzando cualquier Exception de Java. Esto no es provocado por la validacin de los metodos assert, sino que nos indica algun error de implementacin, pudiendo ser del propio TestCase o de nuestro cdigo. Puede que el resultado sea una mezcla de excepciones de Java y FailedAssertionErrors.

Flujo de ejecucin de un Test

Clase Assert La clase junit.framework.Assert, nos proporciona una serie de mtodos encargados de hacer las comprobaciones correspondientes.

Mtodo assert() de JUnit assertTrue(expresin) assertFalse(expresin) assertEquals(esperado, real) assertNull(objeto) assertNotNull(objeto)

Qu comprueba Que la expresin sea verdadera (true) Que la expresin sea falsa (false) Que 'esperado' sea igual a 'real' Que 'objeto' sea nulo (null) Que 'objeto' no sea nulo (null)

assertSame(objeto_esperado,obj Que 'objeto_esperado' sea el mismo que 'objeto_real' (misma eto_real) referencia) assertNotSame(objeto_esperado, Que 'objeto_esperado' no sea el mismo que 'objeto_real' objeto_real) (distinta referencia) fail() Termina el test con fallas.

Nota: La diferencia entre 'assertSame' y 'assertEquals', es que mientras que 'assertEquals' comprueba que dos objetos sean iguales en forma y contenido, 'assertSame' comprueba que los objetos compartan la misma referencia en memoria. Todos los mtodos anteriores admiten opcionalmente un argumento String con un mensaje explicativo de la comprobacin que realiza el test, o de corresponder, de la razn de fallo. De estar presente, dicho argumento sera el primero de la lista, por ejemplo: assertTrue (mensaje, expresin) Cada llamada a un mtodo assert puede ser considerada como un test en s misma. La lgica de estos mtodos es simple: si la condicin del mtodo assert se cumple, el test es valido. En caso contrario el test no es vlido y lanza un 'FailedAssertionError', es decir, un error en el testeo. Es importante tener en cuenta, en caso de utilizar bloques try-catch, que capturan excepciones que lanza el cdigo en caso de anomalas, que los mismos pueden afectar la integridad del test si no se controlan correctamente. Lo ideal sera, en caso de existir alguna excepcin atrapada, utilizar el mtodo fail(), con el texto de la expecin como parmetro, para adems de asegurar que el test tenga un comportamiento normal, poder saber cul fue la razn del fallo en el mismo.

Clase TestCase TestCase es la base sobre la cual definiremos nuestros tests. Esta clase extiende de junit.framework.Assert. La secuencia de ejecucin de una clase que herede de TestCase es la siguiente: setUp() testMtodo() tearDown()

Esta secuencia se repite para todos los mtodos de test que contenga nuestra clase. Si tuviesemos varios mtodos test que realizan algun tratamiento sobre unos mismos datos, deberiamos usar setUp() para la inicializacion de dichos datos. En setUp() inicializaremos variables, estableceremos conexiones con bases de datos, etc. En tearDown() liberaremos recursos tales como las conexiones a bases de datos El en ejemplo siguiente mostramos como utilizar setUp(). public class LinkedListTest extends TestCase{ Object archivo1; Object archivo2; Object archivo3; LinkedList lista; @Before public void setUp(){ archivo1 = new Archivo("1", "/1", "txt"); archivo2 = new Archivo("2", "/2", "txt"); archivo3 = new Archivo("3", "/3", "txt"); lista = new LinkedList(); } @Test public void testCount() { lista.add(archivo1); lista.add(archivo2); lista.add(archivo3); int cantidadEsperada = 3; int cantidadResultado = lista.count(); assertEquals(cantidadEsperada, cantidadObtenida); } }

TestSuite Es posible que tengamos nuestros tests estructurados en varias clases TestCase y deseemos ejecutarlos a todos de una sola vez. Con este proposito JUnit nos proporciona la clase TestSuite que sirve para agrupar tanto TestCases como otras TestSuite. Al ejecutar el TestSuite, se ejecutarn todos los tests contenidos en sta, y desplegar los resultados obtenidos de cada uno de ellos. TestRunner La clase junit.textui.TestRunner es la encargada de ejecutar nuestros tests. Disponemos de tres clases TestRunner, una en modo texto, y dos ms en modo grfico, con las plataformas grficas de Java, Swing y AWT.

Estructura Bsica

También podría gustarte