DBUnit проблема при тесте.
От: unkis  
Дата: 02.09.09 12:49
Оценка:
Ребята у меня следующая проблема, мне нужно протестировать две таблицы на идентичность.

вот так я это делаю.



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
Re: DBUnit проблема при тесте.
От: Blazkowicz Россия  
Дата: 02.09.09 14:00
Оценка:
Здравствуйте, unkis, Вы писали:

U> Assertion.assertEquals(table1, table2);

А я как-то вообще не вижу смысла в этом assert, так как судя по java doc в dbunit никто equals не переопределяет. Тесто по идее должен падать всегда. А что говорит отладка? может там null?
Re[2]: DBUnit проблема при тесте.
От: АнтонЗацепин США  
Дата: 03.09.09 18:37
Оценка: 1 (1)
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, unkis, Вы писали:


U>> Assertion.assertEquals(table1, table2);

B>А я как-то вообще не вижу смысла в этом assert, так как судя по java doc в dbunit никто equals не переопределяет. Тесто по идее должен падать всегда. А что говорит отладка? может там null?

В этом асерте и реализовано сравнение. он не использует equals
Re: DBUnit проблема при тесте.
От: АнтонЗацепин США  
Дата: 03.09.09 18:57
Оценка:
Здравствуйте, 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;
        }


сделай у себя в тесте что-нить с данными — должно заработать.
Re[3]: DBUnit проблема при тесте.
От: Blazkowicz Россия  
Дата: 04.09.09 04:16
Оценка:
Здравствуйте, АнтонЗацепин, Вы писали:

U>>> Assertion.assertEquals(table1, table2);

B>>А я как-то вообще не вижу смысла в этом assert, так как судя по java doc в dbunit никто equals не переопределяет. Тесто по идее должен падать всегда. А что говорит отладка? может там null?
АЗ>В этом асерте и реализовано сравнение. он не использует equals
Тест на наименьшее удивление DbUnit API провалил.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.