2015-04-28 76 views
0

我期待將dbUnit集成到項目中。該項目有Spring,沒有ORM。在將XML數據集加載到數據庫時,我得到了 org.dbunit.dataset.NoSuchTableException:XXX_VW 「XXX_VW」是數據庫視圖。但是,我可以將數據集加載到任何表中。我已經在db中確認了所需的視圖退出和元數據是相似的。org.dbunit.dataset.NoSuchTableException:加載數據集以查看

下面是我在測試的設置方法中執行的代碼。

DataSource dc = (MCDataSource) context.getBean("dataSource"); 
      databaseTester = new DataSourceDatabaseTester(dc, dc.getUsername()); 
      DatabaseConfig config = databaseTester.getConnection().getConfig(); 
      config.setProperty(DatabaseConfig.PROPERTY_TABLE_TYPE, new String[]{"TABLE", "VIEW"}); 
      databaseTester.setDataSet(this.getDataSet()); 
      databaseTester.setTearDownOperation(DatabaseOperation.DELETE_ALL); 
      databaseTester.onSetup(); 

任何想法可能是什麼問題?

+0

根據調試日誌org.dbunit.dataset.OrderedTableNameMap包含除視圖外的所有模式表。 – user2103799

+0

我試圖在DatabaseDataSet中進一步調試,即使我已經將表類型屬性設置爲TABLE並查看其沒有更新到配置中。 String [] tableType =(String [])config.getProperty(DatabaseConfig.PROPERTY_TABLE_TYPE); IMetadataHandler metadataHandler =(IMetadataHandler)config.getProperty(DatabaseConfig.PROPERTY_METADATA_HANDLER); – user2103799

回答

0

取而代之的是實現和setOperationListener,並在OperationListener的生命週期方法中執行setProperty。

databaseTester.setOperationListener(new IOperationListener() { 

     @Override 
     public void operationTearDownFinished(IDatabaseConnection connection) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void operationSetUpFinished(IDatabaseConnection connection) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void connectionRetrieved(IDatabaseConnection connection) { 
      DatabaseConfig config = connection.getConfig(); 
      config.setProperty(DatabaseConfig.PROPERTY_TABLE_TYPE, new String[]{"TABLE", "VIEW"}); 
    databaseTester.setDataSet(this.getDataSet()); 
    databaseTester.setTearDownOperation(DatabaseOperation.DELETE_ALL); 
    databaseTester.onSetup();