PDF de programación - Sesión 8: Pruebas con DbUnit - Lenguaje Java Avanzado

Imágen de pdf Sesión 8: Pruebas con DbUnit - Lenguaje Java Avanzado

Sesión 8: Pruebas con DbUnit - Lenguaje Java Avanzadográfica de visualizaciones

Publicado el 13 de Febrero del 2019
568 visualizaciones desde el 13 de Febrero del 2019
280,4 KB
21 paginas
Creado hace 7a (26/09/2012)
Experto Universitario Java Enterprise

Lenguaje Java Avanzado

Sesión 8: Pruebas con DbUnit



© 2012-2013 Depto. Ciencia de la Computación e IA



Experto Universitario Java Enterprise

Puntos a tratar
• Framework
• Prácticas recomendadas
• Ciclo de vida
• Interfaces y clases
• DbUnit y Eclipse
• Ejemplos

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-2



Experto Universitario Java Enterprise

Pruebas con la base de datos
• Necesidad de probar que la capa de acceso a datos accede

correctamente a la base de datos.

• Necesidad de probar el código dados determinados estados de la

base de datos.

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-3



Experto Universitario Java Enterprise

DbUnit
• Framework de código abierto creado por Manuel Laflamme
• Basado en JUnit, es una extensión
• Permite gestionar el estado de una base de datos durante las

pruebas unitarias y e integración.

• Alternativa a la creación de stubs y mocks para controlar las

dependencias externas.

• Se puede usar en conjunción con JUnit.

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-4



Experto Universitario Java Enterprise

Ciclo de vida con DbUnit
• Ciclo de vida

1. Eliminar el estado previo de la BD resultante de pruebas anteriores (en

lugar de restaurarla tras cada test)

2. Cargar los datos necesarios para las pruebas de la BD (sólo los

necesarios para cada test)

3. Utilizar los métodos de la librería DbUnit en las aserciones para realizar

el test

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-5



Experto Universitario Java Enterprise

Prácticas recomendadas en DbUnit

• Usar una instancia de la BD por cada desarrollador.
• Programar los tests para no tener que limpiar la base de datos después.
• Usar múltiples conjuntos de datos pequeños en lugar de uno grande.

• Estrategias de conexión

Inicializar los datos comunes sólo una vez para todos los tests.




Cliente remoto con DatabaseTestCase
A través del pool de conexiones del servidor con IdataBaseConnection o con
JndiBasedDBTestCase

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-6



Experto Universitario Java Enterprise

Características de DbUnit

• Permite evitar los problemas que surgen si el último caso de prueba ha

dejado la base de datos inconsistente.

• Puede trabajar con conjuntos de datos grandes
• Permite verificar que el contenido de la base de datos es igual a

determinado conjunto de datos esperado, a nivel de fichero, de consulta y
de tabla.

• Mecanismo basado en XML para cargar y exportar los datos.
• Casos de prueba individuales por cada operación.

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-7



Experto Universitario Java Enterprise

Clases e interfaces de DbUnit
• DBTestCase

– Hereda de JUnit TestCase
– Proporciona métodos para inicializar y restaurar la BD antes y

después de cada test

– Utiliza IDatabaseTester para conectar con la BD

• Alternativa: Utilizar directamente IDatabaseTester (desde la versión

2.2 de DbUnit). Utilizaremos la versión 2.4.8.

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-8



Experto Universitario Java Enterprise

Clases e interfaces de DbUnit
• IDataBaseTester devuelve conexiones a la BD, de tipo

IDatabaseConnection
– Implementaciones: JdbcDatabaseTester entre otras
– Métodos:

• OnSetUp( ), setSetUpOperation(op)
• OnTearDown( ), setTearDownOperation(op)
• getConnection( )

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-9



Experto Universitario Java Enterprise

Clases e interfaces de DbUnit
• IDataBaseConnection
• Métodos:

– createDataSet( ) - crea un dataset para la BD entera
– createDataSet(lista de tablas)
– createTable(tabla) - crea una tabla extraída de la BD
– createQueryTable(tabla, sql) - crea una tabla con el resultado de

la query sql sobre la BD

– getConnection( ), getConfig( ), getRow( )

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-10



Experto Universitario Java Enterprise

Clases e interfaces de DbUnit

• IDataSet: Representa una colección de tablas. Se utiliza para situar la BD
en un estado determinado y para comparar el estado actual de la BD con
el estado esperado
• Implementaciones:

– FlatXmlDataSet - lee/escribe datos en formato xml
– QueryDataSet - guarda colecciones de datos resultantes de una query

• Métodos:

– getTable(tabla)- devuelve la tabla especificada

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-11



Experto Universitario Java Enterprise

Clases e interfaces de DbUnit
• FlatXMLDataSet: importa y exporta conjuntos de datos a XML

<!DOCTYPE dataset SYSTEM "my-dataset.dtd">
<dataset>
<TEST_TABLE COL0="row 0 col 0"
COL1="row 0 col 1"
COL2="row 0 col 2"/>
<TEST_TABLE COL1="row 1 col 1"/>
<SECOND_TABLE COL0="row 0 col 0"
COL1="row 0 col 1" />
<EMPTY_TABLE/>
</dataset>

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-12



Experto Universitario Java Enterprise

Clases e interfaces de DbUnit
• Clase Assertion: define los métodos estáticos para realizar las

comparaciones:
– assertEquals(IDataSet, IDataSet)
– assertEquals(ITable, ITable)

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-13



Experto Universitario Java Enterprise

Dependencias de librerías
• JUnit (utilizaremos la versión 4)
• Jakarta Commons IO (versión 1.4)

– Utilidades para E/S

• Slf4j (versión 1.6)

– Frontend para frameworks de logging

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-14



Experto Universitario Java Enterprise

En Eclipse

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-15



Experto Universitario Java Enterprise

En Eclipse
• Ejecutamos la prueba con Run as → JUnit Test

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-16



Experto Universitario Java Enterprise

Estructura de la prueba

public class TestMiJDBCDAO {

private JDBCDAO dao;
private IDatabaseTester databaseTester;

@Before
public void setUp() throws Exception {

}

@After
public void tearDown() throws Exception {

}

@Test
public void test1() throws Exception {

}

    ...
}

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-17



Experto Universitario Java Enterprise

Antes y después de cada test

@Before
public void setUp() throws Exception {

//Obtener instancia del DAO que testeamos
pdao = new JDBCPeliculaDAO();

//Acceder a la base de datos
databaseTester = new JdbcDatabaseTester("com.mysql.jdbc.Driver",

        

"jdbc:mysql://localhost/databasename", "username", "password");

//Inicializar el dataset en la BD

      FlatXmlDataSetBuilder builder = new FlatXmlDataSetBuilder();

        

IDataSet dataSet = builder.build(

this.getClass().getResourceAsStream("/db­init.xml"));

        

databaseTester.setDataSet(dataSet);

        //Llamar a la operación por defecto setUpOperation
        databaseTester.onSetup();
}

@After
public void tearDown() throws Exception {

databaseTester.onTearDown();

}

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-18



Experto Universitario Java Enterprise

Recursos XML

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-19



Experto Universitario Java Enterprise

Prueba



@Test
public void test1DelAdd() throws Exception {
//Realizar la operación con el JDBC DAO
...

//Conectar a la base de datos MySQL

      IDatabaseConnection connection = databaseTester.getConnection();

DatabaseConfig dbconfig = connection.getConfig();
dbconfig.setProperty("http://www.dbunit.org/properties/datatypeFactory", new MySqlDataTypeFactory());

//Crear el DataSet a partir de la base de datos MySQL
QueryDataSet partialDataSet = new QueryDataSet(connection);
partialDataSet.addTable("tabla1");
partialDataSet.addTable("tabla2");
partialDataSet.addTable("tabla3");

//Escribir el DataSet en XML para después compararlo con el esperado
File outputFile = new File("db­result.xml");
FlatXmlDataSet.write(partialDataSet, new FileOutputStream(outputFile));

//Obtener los datos esperados del XML
URL url = IDatabaseTester.class.getResource("/db­expected.xml");
Assert.assertNotNull(url);
File inputFile = new File(url.getPath());

//Comparar los ficheros XML
Assert.assertEquals(FileUtils.readFileToString(inputFile, "UTF8"), 

           FileUtils.readFileToString(outputFile, "UTF8"));

        
        
   
        

        

}

Lenguaje Java Avanzado

© 2011-2012 Depto. Ciencia de la Computación e IA

DbUnit-20



Experto Universitario Java Enterprise

¿Preguntas...?



© 2012-2013 Depto. Ciencia de la Computación e IA
  • Links de descarga
http://lwp-l.com/pdf15182

Comentarios de: Sesión 8: Pruebas con DbUnit - Lenguaje Java Avanzado (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad