1

会出什么问题?

我已经开始为我的新 J2EE 项目编写 hibernate 域类,在我最初的分析过程中,我觉得域类中可能出现以下问题,这需要我为它们编写自动化测试以提前捕获它们:

  1. 属性/列映射——我可能错误地为域类中的给定属性配置了错误的列
  2. 我可能会更改数据库列名并忘记更改域类文件中的相应映射
  3. 我可能忘记在构造函数中设置对象属性。这可能发生在类创建期间或通过注释掉某些属性但忘记取消注释它们来测试某些东西时发生。(我在现实生活中犯了这个错误)。
  4. 我没有为相应的数据库列类型定义具有正确数据类型的属性。
  5. 边界条件测试以确保我们为属性定义了正确大小的数据类型。这还将捕获将来对数据类型的任何无意更改,例如从 long 到 int。

是否针对这些更改测试域类是否称为单元测试,我不确定,因为它在测试时涉及数据库。我需要的是一种测试我的域类的方法,以确保它们不会由于上述任何此类更改而被破坏,当然,这是无意的。

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

领域类的自动化测试

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

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

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

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

问题

  1. 上述论点有意义吗?如果不是,为什么?
  2. 如果有意义的话,什么是实际实施的正确技术?那会是 JUnit 还是 TestNG 等?

提前感谢您的投入。

4

2 回答 2

1

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

在您的检查列表中,在第 5 点还添加其他验证检查,即不可为空的字段、唯一约束等。

之所以提到 JUnit,是因为我已经成功使用它,可以使用 nunit、testng 或任何其他单元测试框架。

于 2013-11-08T19:36:12.597 回答
1

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

  • 是的

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

于 2013-11-09T15:18:16.193 回答