2013-07-14 94 views
0

我正在嘗試將dbunit與oracle一起使用,並具有如下的測試用例。當我嘗試運行下面的代碼時,它給了我。我不確定我在這裏錯在哪裏。是否有人可以幫助DbUnit中的NoSuchTableException Oracle

org.dbunit.dataset.NoSuchTableException:INVOICE_STATUS_TYPE 在org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:278) 在org.dbunit.operation.DeleteAllOperation.execute(DeleteAllOperation.java :109) 在org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:79)

import junit.framework.Assert; 
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.junit.Test; 


public class MyTest extends DBTestCase{ 

private FlatXmlDataSet loadedDataSet; 
public MyTest() { 

    super(); 
    System.out.println("TEST TEST"); 
    System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "oracle.jdbc.OracleDriver"); 
    System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=vp1.qa.nsc.com)(PORT=2186))(CONNECT_DATA=(SERVICE_NAME=FADBBD1E)))"); 
    System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "nscdba"); 
    System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "dscdbapwd"); 
    System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_SCHEMA, "INVOICE"); 
} 


@Override 
protected IDataSet getDataSet() throws Exception { 

    //return new FlatXmlDataSetBuilder().build(new FileInputStream("dataset.xml")); 

    loadedDataSet = new FlatXmlDataSet(this.getClass().getClassLoader().getResourceAsStream("dataset.xml")); 
    System.out.println(loadedDataSet.getTableNames().length); 
    return loadedDataSet; 
} 

@Test 
public void testStatus() { 
    System.out.println("Hey..."); 
    Assert.assertTrue(true); 
} 

protected void setUpDatabaseConfig(DatabaseConfig config) { 
    config.setProperty(DatabaseConfig.FEATURE_QUALIFIED_TABLE_NAMES, true); 
} 
} 
+0

那麼,這是否表INVOICE_STATUS_TYPE數據庫FADBBD1E存在嗎? –

回答

0

你在哪裏調用 「org.dbunit.operation.DeleteAllOperation.execute()」?

如果該表存在,請查看如何獲取dbunit連接。

private IDatabaseConnection getConnectionUsing(Connection con, 
     String username) throws SQLException, DatabaseUnitException { 
    // oracle schema name is the user name 
    IDatabaseConnection connection = new DatabaseConnection(con, 
      username.toUpperCase()); 
    DatabaseConfig config = connection.getConfig(); 
    // oracle 10g 
    config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, 
      new Oracle10DataTypeFactory()); 
    // receycle bin 
    config.setProperty(
      DatabaseConfig.FEATURE_SKIP_ORACLE_RECYCLEBIN_TABLES, 
      Boolean.TRUE); 
    return connection; 
} 

private IDatabaseConnection getConnectionUsing(Connection con) 
     throws DatabaseUnitException { 
    return new DatabaseConnection(con); 
} 

如果您針對oracle運行測試,則需要將db用戶名作爲模式名稱提供。如果您針對hsqldb運行測試,請不要提供用戶名。

希望這會有所幫助。

1

使用Oracle,確保數據庫憑據都以大寫字母,即:

System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "MYUSERNAME"); 
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "MYPASSWORD"); 
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_SCHEMA, "INVOICE");