【问题标题】:Best unit tests for Hibernate EntitiesHibernate 实体的最佳单元测试
【发布时间】:2014-03-12 20:11:25
【问题描述】:

也许这是一个幼稚的问题,但我想知道有经验的人在这个主题上的经验......

我想知道应该在 Hibernate Entities 中进行单元测试的基本和最佳“事物”是什么。我稍微解释一下自己:

  • 是否值得测试所有实体的简单 CRUD?
  • 在这里我读到开发人员不应该依赖 数据库本身的约束,例如长度、非空值、唯一键等。 测试数据库中定义的所有可能的限制是有意义的 实体?
  • 其他提示?

我想到的另一个不同的问题是,如果输入值为空,我是否应该抛出异常?或者这个“层/级别”太低而无法抛出异常。

非常感谢您提前抽出时间和经验!

【问题讨论】:

    标签: java hibernate unit-testing


    【解决方案1】:

    当提到“POJO”时,我假设您的意思是“实体”。

    无需测试实体或其关联。如果您有错误,它们将在您测试 DAO 或服务层时呈现给您。

    您不应直接从实体中抛出任何异常。验证任务由验证器完成,例如Hibernate 注释或自定义验证器对象。

    您应该测试作为公共 API 一部分并由客户端使用的每个类和方法,这些类和方法除了获取或设置属性和其他琐碎的行为外,还会做一些事情。如果这是一个简单的 CRUD 操作,您仍然需要测试一切是否按预期运行(在此阶段您可能会发现关系等方面的一些怪癖)。

    【讨论】:

    • 是的,我指的是实体。我已经更新了这个问题。谢谢我的回答!
    【解决方案2】:

    我不是 TDD 专家,仅代表个人观点: 我对此并不执着,但我希望每个实体至少有一个基本的理智,才能看到它实际到达数据库 - 即一种简单的方法来保存和检索它。 如果实体包含一些扭曲(关系、复合键等),则更是如此。 如果我有一个更有趣的场景,我可能会直接从它开始——例如保存列表并进行复杂查询)。

    我不会测试每一个约束,但也许这是一个品味/要求的问题。 关于空示例,您的意思是在实体的设置器中进行验证(例如 setPrice())吗?通常我不会,我会把它留给休眠约束。一个原因是我的实体可能用于其他场景 - 例如从故意丢失数据的客户端/文件中读取,让服务器完成丢失的数据,然后保存(如果该客户端/文件数据严重混乱,我会使用专用的 DTO,但对于简单的情况,我会满足于原始对象 - 尽管我们在团队中有一个关于它的哲学争论)。

    祝你好运:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多