Я использую 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>