DBUnit – Créer facilement un jeu de données de test à partir de données réelles

DBUnit permet d'ajouter des données de test avant l'exécution du test et de supprimer ces données après l'exécution du test.

Ces jeux de données sont stockés dans un fichier XML appelé "dataset".

Nous allons voir comment exporter facilement des données déjà existantes pour générer un fichier XML de données de test.

Requêtes de sélection des données

La classe QueryDataSet de DBUnit permet de générer les données XML à partir de requêtes SQL.

Nous avons à définir la connexion à la base de données existante et à définir les requêtes SQL via le QueryDataSet.

Les requêtes de sélection des données de la table Article et Produit sont ajoutés au QueryDataSet :

queryDataSet.addTable("article", "select * from article limit 10");
queryDataSet.addTable("produit", "select * from produit where produit.id in (select produit_id from article limit 10)");

Classe d'export des données

Voici la classe d'export des données via DBUnit :

package org.demo;

import java.io.File;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;

import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.DatabaseSequenceFilter;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.database.QueryDataSet;
import org.dbunit.dataset.FilteredDataSet;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.filter.ITableFilter;
import org.dbunit.dataset.xml.FlatDtdDataSet;
import org.dbunit.dataset.xml.FlatXmlWriter;

public class DBUnitExportTable {
	
	public static void main(String[] args) throws Exception {
    	// database connection
        Connection jdbcConnection = DriverManager.getConnection(
                "jdbc:postgresql://localhost:5432/demo", 
                "demo", 
                "demo");
    	IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);

    	String fileNameExport = "data";
        
        // Requêtes de sélection des jeux de données
        QueryDataSet queryDataSet = new QueryDataSet(connection);
        
        // TODO Définir les requêtes de sélection des données
        queryDataSet.addTable("article", "select * from article limit 10");
        queryDataSet.addTable("produit", "select * from produit where produit.id in (select produit_id from article limit 10)");
        
    	// Création du répertoire d'export
    	String dirExport = "target/generated";
        (new File(dirExport)).mkdirs();
        // Ordonner les tables par ordre de dépendances dans le fichier d'export XML
        ITableFilter filter = new DatabaseSequenceFilter(connection);
        IDataSet orderedDataSet = new FilteredDataSet(filter, queryDataSet);
        // DTD
        FlatDtdDataSet.write(queryDataSet, new FileOutputStream(dirExport+"/"+fileNameExport+".dtd"));
        // XML
        FlatXmlWriter datasetWriter = new FlatXmlWriter(new FileOutputStream(dirExport+"/"+fileNameExport+".xml")); 
        datasetWriter.setDocType(fileNameExport+".dtd");
        datasetWriter.write(orderedDataSet);
    }
	
}

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.