2015-05-13 2 views
0

Я использую DB и DBUnit для модульного тестирования. К сожалению, мое приложение подключается к нескольким схемам (не может этого изменить). Всякий раз, когда имя схемы входит в игру, я получаю org.dbunit.dataset.NoSuchTableExceptionПроблемы с несколькими схемами при модульном тестировании базы данных

Когда я использую 'CREATE SCHEMA' в моей базе данныхSchema.sql, набор данных, кажется, вставлен просто отлично; однако, когда мой DAO пытается вытащить что-то, что относится к моей схеме, я получаю исключение.

Когда я использую 'СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ' в моей базе данныхSchema.sql, исключение возникает при загрузке набора данных.

Соответствующие части моего тестового класса

@Before 
public void setUp() throws Exception { 
    IDatabaseConnection iDBConn = getConnection(); 

    //Enable 
    String qualifiedTableNames = "http://www.dbunit.org/features/qualifiedTableNames"; 
    iDBConn.getConfig().setProperty(DatabaseConfig.FEATURE_QUALIFIED_TABLE_NAMES, true); 

    initSchema(); 
    insertDataSet(iDBConn); 
    target = new OracleDAO(jdbcConnection, null); 
} 

protected IDatabaseConnection getConnection() throws Exception { 
    Class.forName("org.hsqldb.jdbcDriver"); 
    jdbcConnection = DriverManager.getConnection("jdbc:hsqldb:mem:fdr", "sa", ""); 

    return new DatabaseConnection(jdbcConnection); 
} 

protected void initSchema() throws Exception { 
    FileReader fileReader = new FileReader(new File(this.getClass().getResource("/databaseSchema.sql").getFile())); 
    BufferedReader br = new BufferedReader(fileReader); 
    StringBuffer sb = new StringBuffer(); 
    while (br.ready()) { 
     sb.append(br.readLine()); 
    } 

    Statement stmt = jdbcConnection.createStatement() ; 
    String[] queries = sb.toString().split(";"); 
    for (String query : queries) { 
     stmt.execute(query); 
    } 
} 

protected IDataSet insertDataSet(IDatabaseConnection iDBConn) throws Exception { 
    loadedDataSet = new FlatXmlDataSet(this.getClass().getClassLoader().getResourceAsStream("dataset.xml")); 
    DatabaseOperation.CLEAN_INSERT.execute(iDBConn, loadedDataSet); 
    return loadedDataSet; 
} 

databaseSchema.sql

SET DATABASE SQL SYNTAX ORA TRUE; 

CREATE SCHEMA SCHEMA_A; 
--Also tried CREATE USER SCHEMA_A pwd; 

CREATE TABLE if not exists SCHEMA_A.TBL_1 
( "ID" NUMBER, 
    "OTHER_ID" NUMBER(10,0) 
); 

dataset.xml

<?xml version="1.0" encoding="UTF-8"?> 
<dataset>  
    <SCHEMA_A.TBL_1 ID="1" other_id="1" /> 
</dataset> 

ответ

1

Обновление Maven зависимостей для DBUnit устранили эту проблему. Теперь я могу работать с несколькими схемами.

<dependency> 
    <groupId>org.dbunit</groupId> 
    <artifactId>dbunit</artifactId> 
    <version>2.5.1</version> 
    <scope>test</scope> 
</dependency>