package com.oceaneconsulting.tanaguru; import java.io.FileInputStream; import org.apache.log4j.Logger; import org.dbunit.DBTestCase; import org.dbunit.PropertiesBasedJdbcDatabaseTester; import org.dbunit.database.DatabaseConfig; import org.dbunit.dataset.IDataSet; import org.dbunit.dataset.xml.FlatXmlDataSet; import org.dbunit.dataset.xml.FlatXmlDataSetBuilder; import org.dbunit.operation.DatabaseOperation; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import org.springframework.jdbc.datasource.DriverManagerDataSource; public abstract class AbstractDbUnitTest extends DBTestCase { /** * Logger. */ protected static final Logger LOGGER = Logger.getLogger(AbstractDbUnitTest.class); /** * driver JDBC */ private static final String JDBC_DRIVER = "org.hsqldb.jdbcDriver"; /** * base de données HSQLDB nommée "database" qui fonctionne en mode mémoire */ private static final String DATABASE = "jdbc:hsqldb:file:src/test/resources/hsql-db"; /** * utilisateur qui se connecte à la base de données */ private static final String USER = "sa"; /** * getDataSet mot de passe pour se connecter à la base de données */ private static final String PASSWORD = ""; /** * Context d'application spring */ private static final String SPRING_FILE_PATH = "classpath*:test-beans-ws.xml"; private String inputDataFileName = ""; /** * Récupération du fichier de données pour le test * @return Le chemin du fichier de données du test */ public String getInputDataFileName() { return inputDataFileName; } /** * Setter de fichier de données pour le test * @param inputDataFileName Le chemin du fichier de données pour le test */ public void setInputDataFileName(String inputDataFileName) { this.inputDataFileName = inputDataFileName; } /** * La fabrique de spring */ protected BeanFactory springBeanFactory; /** * Constructeur * @param testName Le nom du test */ public AbstractDbUnitTest(String testName) { super(testName); ApplicationContext springApplicationContext = new FileSystemXmlApplicationContext(SPRING_FILE_PATH); springBeanFactory = springApplicationContext; DriverManagerDataSource dmds =(DriverManagerDataSource)springBeanFactory.getBean("dataSource"); System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS,JDBC_DRIVER); System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL,dmds.getUrl()); System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME,dmds.getUsername()); System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD,dmds.getPassword()); } /** * Override method to set custom properties/features {@inheritDoc} */ @Override protected void setUpDatabaseConfig(DatabaseConfig config) { super.setUpDatabaseConfig(config); config.setProperty(DatabaseConfig.PROPERTY_BATCH_SIZE, new Integer(97)); } /** * Charge le jeu de données à partir d'un fichier XML d'import */ @Override protected IDataSet getDataSet() throws Exception { FlatXmlDataSetBuilder flatXmlDataSetBuilder = new FlatXmlDataSetBuilder(); FlatXmlDataSet loadedDataSet = flatXmlDataSetBuilder.build(new FileInputStream(getInputDataFileName())); return loadedDataSet; } @Override protected DatabaseOperation getSetUpOperation() throws Exception { return DatabaseOperation.CLEAN_INSERT; } @Override protected DatabaseOperation getTearDownOperation() throws Exception { return DatabaseOperation.NONE; } }