我在使用 JUnit 4、HSQLDB_2.2.9 和 DBUnit_2.4.8 进行一些测试时遇到问题。我正在使用以下输入文件(input.xml):
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<record_type record_type="Logical" />
<record_type record_type="Conceptual" />
</dataset>
我正在使用 getDataSet 方法使用此文件,如下所示:
@Override
protected IDataSet getDataSet() throws Exception
{
System.out.println("Getting data set...");
loadedDataSet = new FlatXmlDataSetBuilder();
FlatXmlDataSet dataSet = loadedDataSet.build(new File("test\\test\\files\\input.xml"));
System.out.println("Dataset is "+dataSet.getTable("record_type").getValue(0, "record_type"));
return dataSet;
}
现在我的 SetUp 方法执行以下操作:
protected void setUp() throws Exception
{
System.out.println("Setting up environment...");
getSetUpOperation();
tearDown();
createTables();
}
createTables 方法如下:
private void createTables() throws SQLException, Exception
{
System.out.println("Creating database tables");
String createRecordTypeTableSQL = "CREATE TABLE IF NOT EXISTS record_type "+
"(record_type VARCHAR(30) NOT NULL,"+
"PRIMARY KEY (record_type))";
PreparedStatement createErrorTypeTablePS = getConnection().getConnection().prepareStatement(createRecordTypeTableSQL);
createRecordTypeTablePS.executeUpdate();
}
我的get连接如下:
@Override
protected IDatabaseConnection getConnection() throws Exception
{
Connection jdbcConnection = null;
Class.forName("org.hsqldb.jdbc.JDBCDriver");
String url = "jdbc:hsqldb:sample";
Properties props = new Properties();
props.setProperty("user","sa");
props.setProperty("password","");
jdbcConnection = DriverManager.getConnection(url, props);
return new DatabaseConnection(jdbcConnection);
}
至于我的测试用例,如下:
@Test
public void testSelect() throws Exception
{
String selectSQL = "SELECT * from record_type";
PreparedStatement selectPS =
getConnection().getConnection().prepareStatement(selectSQL);
ResultSet resultRS = selectPS.executeQuery();
String recordType=null;
if(resultRS.next())
{
recordType = resultRS.getString("record_type");
System.out.println("Found record type: "+recordType);
}
assertEquals("Result ","Logical",recordType);
}
所以我期待的是值“逻辑”,但我得到的结果是“空”。为了验证我的 getDataSet 方法是否正确使用了 input.xml 文件,我添加了以下行:
System.out.println("Dataset is "+dataSet.getTable("record_type").getValue(0, "record_type"));
正如预期的那样,它返回了record_type“逻辑”。所以我认为我的问题是 getDataSet 方法返回的返回的 IDataSet 没有将检索到的数据绑定到我创建的数据库表。
注意:我尝试在数据库中手动插入一个record_type,通过我的测试方法成功插入和检索,所以数据库连接也没有问题。
有任何想法吗?
更新: 解决我的问题的唯一方法是将以下内容添加到我的 getDataSet() 方法中:
DatabaseOperation.CLEAN_INSERT.execute(getConnection(), dataSet);
我确信在没有这行代码的情况下我能够做到这一点。我做错了什么吗?