Ребята у меня следующая проблема, мне нужно протестировать две таблицы на идентичность.
вот так я это делаю.
import java.io.FileOutputStream;
import org.dbunit.Assertion;
import org.dbunit.DBTestCase;
import org.dbunit.PropertiesBasedJdbcDatabaseTester;
import org.dbunit.database.DatabaseConfig;
import org.dbunit.database.QueryDataSet;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.ITable;
import org.dbunit.dataset.xml.XmlDataSet;
public class SampleDBUnitTest extends DBTestCase {
private static final String TABLE1 = "SWH_Kalkulationsanfrage_kopf";
private static final String TABLE2 = "SWH_PARAMETR";
public SampleDBUnitTest(String name) {
super(name);
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "oracle.jdbc.driver.OracleDriver");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "....");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "....");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "....");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_SCHEMA, "....");
}
protected IDataSet getDataSet() throws Exception {
QueryDataSet dataSet = new QueryDataSet(getConnection());
dataSet.addTable(TABLE1);
dataSet.addTable(TABLE2);
XmlDataSet.write(dataSet, new FileOutputStream("dataset.xml"));
return dataSet;
}
public void testMe() throws Exception {
getConnection().getConfig().setFeature(DatabaseConfig.FEATURE_QUALIFIED_TABLE_NAMES, true);
IDataSet databaseDataSet = getConnection().createDataSet();
ITable table1 = databaseDataSet.getTable(TABLE1);
IDataSet databaseDataSet2 = getConnection().createDataSet();
ITable table2 = databaseDataSet2.getTable(TABLE2);
Assertion.assertEquals(table1, table2);
}
}
вот так выглядит мой dataset и те таблицы которые я хочу сравнить
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<table name="SWH_Kalkulationsanfrage_kopf">
<column>TKK_MESSAGEID</column>
<column>TKK_QUELLSYSTEM</column>
<column>TKK_ZIELSYSTEM</column>
<column>TKK_ANGEBOTSGUID</column>
<column>TKK_ANGEBOTSGUID_VORG</column>
<column>TKK_ANGEBOTSGUID_ERST</column>
<column>TKK_ANGEBOTSBEZEICHNUNG</column>
<column>TKK_GP_NUMMER</column>
<column>TKK_GP_NAME_1</column>
<column>TKK_GP_NAME_2</column>
<column>TKK_GP_STRASSE</column>
<column>TKK_GP_HAUSNUMMER</column>
<column>TKK_GP_HAUSNUMMERX</column>
<column>TKK_GP_PLZ</column>
<column>TKK_GP_ORT</column>
<column>TKK_GP_POSTFACH</column>
<column>TKK_GP_PLZ_POSTFACH</column>
<column>TKK_GP_PLZ_FIRMA</column>
<column>TKK_GP_LAENDERSCHLUESSEL</column>
<column>TKK_BENUTZERKUERZEL_AKTIVE</column>
<column>TKK_BENUTZERKUERZEL_AD</column>
<column>TKK_BENUTZERKUERZEL_ID</column>
<column>TKK_AKQUISITIONSART</column>
<column>TKK_KUNDENTYPE</column>
<column>TKK_KUNDENSEGMENT</column>
<column>TKK_ANGEBOTSKUNDENKATEGORIE</column>
<column>TKK_BONITAET_VERTRIEB</column>
<column>TKK_ZAHLUNGSZIEL</column>
<column>TKK_GESAMTARBEIT</column>
</table>
<table name="SWH_PARAMETR">
<column>PARA_KEY</column>
<column>PARA_VALUE</column>
<column>PARA_COMMENT</column>
</table>
</dataset>
как видно абсолютно две разные таблицы, также они пустые, тоесть не содержат никаких данных.
Проблема в том что тест говорит "ок", а должен сказать error.
Почему так и что я делаю не правильно?
да вовремя запуска вылетает следующая exception
009-09-02 14:39:03,942 DEBUG [org.dbunit.util.SQLHelper --> update():234] - Could not retrieve the 'isAutoIncrement' property because not yet running on Java 1.5 - defaulting to NO. Table=SWH_PARAMETR, Column=PARA_KEY
java.sql.SQLException: Ungültiger Spaltenindex
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:263)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:271)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:445)
at oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl.java:957)
at org.dbunit.util.SQLHelper.createColumn(SQLHelper.java:348)
at org.dbunit.database.DatabaseTableMetaData.getColumns(DatabaseTableMetaData.java:331)
at org.dbunit.database.DatabaseTableMetaData.toString(DatabaseTableMetaData.java:402)
at org.slf4j.helpers.MessageFormatter.safeObjectAppend(MessageFormatter.java:270)
at org.slf4j.helpers.MessageFormatter.deeplyAppendParameter(MessageFormatter.java:242)
at org.slf4j.helpers.MessageFormatter.arrayFormat(MessageFormatter.java:200)
at org.slf4j.helpers.MessageFormatter.format(MessageFormatter.java:142)
at org.slf4j.impl.Log4jLoggerAdapter.debug(Log4jLoggerAdapter.java:246)
at org.dbunit.dataset.OrderedTableNameMap.update(OrderedTableNameMap.java:234)
at org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:294)
at org.dbunit.database.DatabaseDataSet.getTable(DatabaseDataSet.java:307)
at de.enercity.claudio2.crmtest.utils.SampleDBUnitTest.testMe(SampleDBUnitTest.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
2009-09-02 14:39:03,942 DEBUG [org.dbunit.dataset.datatype.DefaultDataTypeFactory --> update():234] - createDataType(sqlType=12 , sqlTypeName=VARCHAR2, tableName=SWH_PARAMETR, columnName=PARA_KEY) - start
Здравствуйте, unkis, Вы писали:
U>Ребята у меня следующая проблема, мне нужно протестировать две таблицы на идентичность.
U>вот так я это делаю.
проблема в том что dbunit чистит данные вначале теста. А потом когда делает проверку —
// if both tables are empty, it is not necessary to compare columns, as such
// comparison
// can fail if column metadata is different (which could occurs when
// comparing empty tables)
if (expectedRowsCount == 0 && actualRowsCount == 0) {
logger.debug("Tables are empty, hence equals.");
return;
}
сделай у себя в тесте что-нить с данными — должно заработать.