在hibernate域类中可能出现什么问题 - 以便我们需要(单元)测试它们?

时间:2013-11-08 19:18:36

标签: hibernate unit-testing

可能出现什么问题?

我已经开始为我的新J2EE项目编写hibernate域类,并且在初始分析期间,我觉得域类中的以下内容可能会出错,这使得我需要为他们编写自动化测试以提前捕获它们

  1. 属性/列映射 - 我可能错误地将错误的列配置到域类中的给定属性
  2. 我可能会更改数据库列名,忘记更改域类文件中的相应映射
  3. 我可能忘记在构造函数中设置object属性。这可能发生在类创建时或通过注释掉某些属性但忘记取消注释它们来测试某些内容时。 (我在现实生活中犯过这个错误。)
  4. 我没有为相应的数据库列类型定义具有正确数据类型的属性。
  5. 边界条件测试,以确保我们为属性定义了正确大小的数据类型。这也将捕获未来对数据类型的任何无意更改,例如从long到int。
  6. 是否针对这些更改测试域类是否称为单元测试,我不确定它是否在测试时涉及数据库。我需要的是一种测试我的域类的方法,以确保它们不会因为任何上述变化而被破坏,无意中,当然。

    重要假设:数据库实体(表,约束,索引)已经准确创建,并且没有错误,因为数据类型,大小等已经准确定义。 换句话说,作为“域类的(单元)测试”的一部分,我们不会测试模式中的潜在错误。以下示例: *数据类型及其大小是正确的 *如果存在必要的约束(PK,FK,UK,索引等)并且它们是正确的

    自动测试域类

    对于问题1,2,4 - 使用:在hibernate配置文件中验证。 将记录(只是必填字段就足够了)保存到相关表中的简单测试将确保映射中不存在这些问题。断言:不应该抛出任何异常。

    对于问题3 - 如果遗漏了任何字段,将捕获保存包含所有字段的记录的简单测试。断言:不应该抛出任何异常。

    对于问题5 - 需要测试用例,该测试用例将插入包含具有最大边界条件的所有字段的记录。断言:不应该抛出任何异常。

    总结:使用填充了最大边界值的所有字段保存记录的测试用例将足以测试hibernate域类。断言:不应该抛出任何异常。

    问题

    1. 上述论点是否有意义?如果没有,为什么?
    2. 如果有意义,实际实施的技术是什么?那会是JUnit还是TestNG等?
    3. 提前感谢您的意见。

2 个答案:

答案 0 :(得分:1)

您的假设是正确的,对域模型进行单元测试非常重要,以便每次数据库更改时都运行它们以及实体。 我正在使用类似的程序来测试JPA实体,实现了创建JUnit测试的基础框架,用于测试默认设计的CRUD功能。 通过调用DAO控制器的函数来运行测试,以便对这些函数进行测试,因为这些函数还取决于实体的结构及其关系。 然后还添加了与特定模型和逻辑相关的测试。主 - 细节关系,不允许级联删除,或只允许在满足条件时发生某些事情等。

在您的支票清单中,在第5点还添加其他验证检查,即不是可空字段,唯一约束等。

JUnit只是被提及,因为我已成功使用它,可以使用nunit,testng或任何其他单元测试框架。

答案 1 :(得分:1)

  

1)上述论点是否有意义?如果没有,为什么?

  

2)如果有意义,实际实施的技术是什么?那是JUnit还是TestNG等?