getDataSet不将数据绑定到数据库

时间:2012-12-27 10:41:35

标签: junit4 hsqldb dbunit

使用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();

}

我的连接如下:

@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);


}

所以我期待的是值“Logical”,但我得到的结果是“null”。要验证我的getDataSet方法是否正确使用了input.xml文件,我添加了以下行:

    System.out.println("Dataset is "+dataSet.getTable("record_type").getValue(0, "record_type"));

正在按预期返回record_type“Logical”。所以我认为我的问题是getDataSet方法返回的返回IDataSet没有将检索到的数据绑定到我创建的数据库表。

注意:我尝试手动将record_type插入数据库,并且我的测试方法成功插入并检索了它,因此数据库连接也没有问题。

有什么想法吗?

更新: 的 解决我的问题的唯一方法是将以下内容添加到我的getDataSet()方法中:

DatabaseOperation.CLEAN_INSERT.execute(getConnection(), dataSet);

我确信如果没有这些增加的代码行,我就可以做到这一点。我有什么不对的吗?

0 个答案:

没有答案