J'utilise DbUnit 2.4.8 avec Oracle 10g et JUnit 4.5. Je voudrais désactiver les contraintes de clé étrangère dans Oracle tout en exécutant les tests DbUnit que j'ai pour pouvoir tester des tables uniques indépendantes de toutes les autres tables. C'est ce que j'ai pour le moment:dbunit disable Contrainte Oracle
J'ai créé une classe (DBUnitHelper) qui étend DatabaseTestCase. J'ai
@Override
protected IDatabaseConnection getConnection() throws Exception {
if (usingInternalCtx_)
{
if (!esa.util.SysConfig.isRunning())
esa.util.SysConfig.startupSystem();
ctx_ = OraPool.getCtx();
}
//disable foreign keys
Connection con = ctx_.getConnection();
con.prepareStatement("SET CONSTRAINTS ALL DEFERRED").execute();
return new OracleConnection(con, "my_schema"); // DatabaseConnection(con_);
}
La méthode de test JUnit est:
@Test
public void useDatabaseTesterToRemoveExistingDataThenRunTest()
{
IDataSet dataset = null;
try
{
IDatabaseTester databaseTester = dbunit_.getDatabaseTester();
databaseTester.setDataSet(dbunit_.getDataSet());
databaseTester.onSetup(); // clean out existing entries in the table specified by the dataset and populate it with entries from the database
IDataSet databaseDataSet = databaseTester.getDataSet();
// IDataSet databaseDataSet = con.createDataSet(); // uncomment to retrieve actual rows from the database
ITable actualTable = databaseDataSet.getTable(TABLE_NAME);
// Load expected data from an XML dataset
IDataSet expectedDataSet = dbunit_.getDataSet();
ITable expectedTable = expectedDataSet.getTable(TABLE_NAME);
// Assert new testing database table match expected (xml) table
assertEquals(3,expectedTable.getRowCount());
assertEquals(expectedTable.getRowCount(), actualTable.getRowCount());
assertEquals(expectedTable.getValue(1, "oid"), actualTable.getValue(1, "oid"));
Assertion.assertEquals(expectedTable, actualTable);
databaseTester.onTearDown(); // by default does nothing
} catch (Exception e)
{
e.printStackTrace();
fail("test_names has problems");
}
}
je reçois un ORA-02291: integrity constraint violated - parent key not found error
sur la ligne de Junit: databaseTester.onSetup();
. Lorsque je passe à travers cela avec le débogueur, je vois que le DBUnitHelper.getConnection()
n'est jamais appelé.
Des idées sur ce que je dois corriger pour désactiver les contraintes dans Oracle?
Voir http://stackoverflow.com/questions/128623/disable-all-table-constraints-in-oracle/131595#131595 –