gpt4 book ai didi

java - dbunit 测试用例抛出 NoSuchTableException

转载 作者:行者123 更新时间:2023-12-02 00:55:52 25 4
gpt4 key购买 nike

我正在尝试修复一个项目的测试套件,该项目是我从另一个程序员那里继承的一些java数据库代码。该项目本身使用 hibernate 和 MySQL 来处理数据库,但出于测试用例的目的,正在使用 dbunit。我可以正确加载和初始化 hibernate 的 session 工厂,但是当我尝试在 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 示例并确保语法匹配。

对于可能出现的问题有什么想法吗?我已经在谷歌上搜索了几个小时,但找不到任何有用的东西。

编辑:我忘记提及的一件事是,当我在抛出的行放置断点时,我可以查看数据集的结构并看到我的所有表实际上都在那里,以及所有测试数据。所以至少那部分看起来工作正常。

@Bogdan:嗯...好主意。我将尝试使用常规插入加载数据。@sleske:也是一个很好的建议。感谢您的提示;希望这能让我走上解决这个问题的正确道路。

最佳答案

DatabaseOperation.CLEAN_INSERT 本质上是 DatabaseOperation.DELETE_ALLDatabaseOperation.INSERT 的组合。由于DatabaseOperation.DELETE_ALL以相反的顺序清除表,我怀疑它在清除最后一个表时不会失败,但在清除第一个表时会失败。

您确定数据集中的表确实存在于您测试时使用的数据库中吗?您收到的错误表明他们没有。

关于java - dbunit 测试用例抛出 NoSuchTableException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/563531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com