我正在尝试修复一个项目的测试套件,该项目是我从另一个程序员那里继承的一些 java 数据库代码。项目本身使用hibernate 和MySQL 作为数据库的东西,但为了测试用例的目的,正在使用dbunit。我可以正确加载和初始化hibernate的会话工厂,但是当我尝试在Eclipse中运行我的测试时,我不断收到异常,即“org.dbunit.dataset.NoSuchTableException:mytablename”。
我知道所有文件都在正确的位置,并且我传递给 dbunit 的实际 XML 文件是可以的(我使用的是 FlatXmlDataSet 类型)。我在数据库测试用例基类中的 setUp() 方法如下所示:
@Override
protected void setUp() throws Exception {
super.setUp();
IDataSet dataSet = new FlatXmlDataSet(new File(mDataFile));
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
IDatabaseConnection connection = new DatabaseConnection(session.connection());
DatabaseConfig config = connection.getConfig();
config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new HsqldbDataTypeFactory());
DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
session.getTransaction().commit();
}
在 CLEAN_INSERT 数据库操作之后,立即抛出异常,抱怨我的 XML 文件中的最后一个表,无论这是哪个表。我已经手动和使用 Eclipse 验证了 DTD 和 XML 模式,甚至到了确保两个文件中表的顺序匹配的地步。我宁愿不将这些文件粘贴到此处(因为它会涉及大量搜索替换),但请相信我,我已经查看了 dbunit 示例并确保语法匹配。
关于什么可能是错误的任何想法?我已经在谷歌上搜索了几个小时,但找不到任何有用的东西。
编辑:我忘记提及的一件事是,当我在抛出的行上放置一个断点时,我可以查看 dataSet 的结构并看到我的所有表以及所有测试数据实际上都在那里。所以至少那部分似乎工作正常。
@Bogdan:嗯……好主意。我将尝试使用常规 INSERT 加载数据。@sleske:也是一个很好的建议。感谢您的提示;希望这将使我走上解决此问题的正确道路。