Hibernate实体的最佳单元测试

时间:2014-03-12 20:11:25

标签: java hibernate unit-testing

也许这是一个天真的问题,但我想知道这个主题中有经验的人的经验......

我想知道什么是基本的和最好的"事情"应该在Hibernate实体中进行单元测试。我解释自己好一点:

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

我想到的另一个不同的问题是,如果例如输入空值,我应该抛出异常吗?或者这个"层/级"太低而不能抛出异常。

我非常感谢您的时间和经验!

2 个答案:

答案 0 :(得分:2)

我认为你的意思是"实体"当提到一个" POJO"。

无需测试实体或其关联。如果您遇到故障,则在测试DAO或服务层时会向您显示。

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

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

答案 1 :(得分:1)

我不是TDD专家,只是我的个人意见: 我并不是强迫性的,但我希望每个实体至少具有一个基本理智,看它实际到达数据库 - 即一个保存并检索它的简单方法。 如果权利包含一些扭曲(关系,复合键等),则更是如此。 如果我有一个稍微有趣的场景,我可以直接用它开始 - 例如。保存列表并执行复杂查询)。

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

祝你好运:)