代码之家  ›  专栏  ›  技术社区  ›  Nik Reiman

dbunit测试用例抛出NoSuchTableException异常

  •  0
  • Nik Reiman  · 技术社区  · 17 年前

    我试图在一个项目上修复测试套件,这个项目是我从另一个程序员那里继承的,用于一些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文件中的最后一个表

    有什么可能出错的想法吗?我在谷歌上搜索了好几个小时,却找不到任何有用的东西。

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

    @博格丹:嗯。…好主意。我将尝试使用常规INSERT加载数据。 @斯莱斯克:这也是个好建议。谢谢你的提示;希望这能让我走上解决这个问题的正确道路。

    3 回复  |  直到 17 年前
        1
  •  1
  •   Bogdan    17 年前

    DatabaseOperation.CLEAN_INSERT 本质上是以下各项的组合 DatabaseOperation.DELETE_ALL DatabaseOperation.INSERT .自 数据库操作。DELETE_ALL

        2
  •  1
  •   sleske    17 年前

    需要更多信息来解决这个问题。

    你试过调试这个吗?您可以将DBUnit的源代码作为单独的项目放入Eclipse工作区。然后配置测试的“构建路径”以使用DBUnit项目而不是DBUnit.jar。这样,您就可以调试DBUnit的代码。然后你会希望看到为什么它会抛出一个异常。

        3
  •  1
  •   Nik Reiman    17 年前

    sleske确实是对的——解决这个问题需要更多的信息,这意味着我问的问题不对。虽然这里的两个建议都很有帮助,但考虑到我没有问正确的问题,我很难将其中一个标记为正确的答案,所以我将在这里记录我为使其发挥作用所做的工作。

    hbm.xml文件中列出的模式(即我们在生产数据库中使用的模式)和xml文件中的测试数据库缺少某些列,这些列后来被标记为NOT NULL。此外,XML包含没有.hbm.XML配置文件的表,因为此代码的原始作者从未抽出时间编写使用这些表的功能。因此,即使在DTD中指定了它们,但缺少相应的HBM映射也会导致问题。

    此外,我不得不根据我的发现重写一些数据库测试用例基类代码 in this blog post about using hibernate and dbunit together .

    推荐文章