【问题标题】:DbUnit: problem with increment id generationDbUnit:增量 id 生成问题
【发布时间】:2010-02-09 09:49:34
【问题描述】:

我将 DbUnit 与 Unitils 一起使用,这在大多数情况下都非常有效。

今天我发现了一个奇怪的问题。

情况是:

  • 我使用 Hibernate,并使用“增量”生成器获得 id:
  • 我准备测试数据集,其中最大 id 为 5。
  • 我使用干净插入加载策略。
  • 我有两个测试方法test1test2,每个都在这个表中添加一行。
  • test1方法后新添加的行id=6。
  • test2 方法后新创建的行的 id=7。

这一切都很好,我明白为什么会这样。从维护的角度来看,这是一个问题。如果我在两者之间添加第三个测试方法,即使没有任何改变,方法 test2 也会突然失败,因为 row 会得到不同的 id。

我是否可以强制 DbUnit 或 Hibernate 在每个测试方法之前计算下一个 id 值?

【问题讨论】:

    标签: java unit-testing hibernate junit dbunit


    【解决方案1】:

    首先,您应该提供完整的数据集,id 也是如此。如果不是,请不要测试或基于ids 进行测试。为什么不测试?因为它已经经过良好测试和可靠的东西。永远记住永远不要测试第三方库,它们中的大多数已经经过了很好的测试。但似乎不太可能不依赖ids。我同意,您应该编写一些模拟类来为您解决这个问题,或者您可以提供一些 setter 方法来覆盖您自己生成的值。

    第二个选项总是用空表开始你的测试用例。在每个测试用例之前,您可以编写一个夹具来为您清理表格。

    【讨论】:

    • 清理桌子通常是不够的;您可能还需要重置表 ID 序列。
    【解决方案2】:

    解决办法是不要依赖生成的id:

    • 它们不在您的测试控制范围内。
    • 如果您让它们受测试控制,您将不再测试被测类

    【讨论】:

    • 我该怎么做?有没有办法以某种方式忽略关键列?
    • 我不知道,我没有关于你的测试类和被测类的信息
    • 我的意思是,如何在 DbUnit 和 Unitils 中做到这一点?
    • 我想我暗示“不要这样做”;)阅读 Vinegar 的答案以获得更好的理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 2015-12-08
    相关资源
    最近更新 更多