【问题标题】:Testing Java database entity classes测试 Java 数据库实体类
【发布时间】:2009-07-30 17:15:57
【问题描述】:

目前,我们正在测试实体类和“工作者”类,方法是为每个实体编写 java servlet,并为每个实体执行插入、更新、删除、查找...以确保其正常工作。工作类只是使用 JDBC 将实体持久保存到数据库的接口的简单实现,它们为实体执行数据库工作。

我想知道的是,在 Java 中测试实体类的最佳方法是什么?

我正在寻找一种自动化方法,而不是基本上编写一个模拟应用程序,该应用程序调用我尝试为创建的每个新实体测试的所有函数。

【问题讨论】:

  • 您所要求的与简单的单元测试有何不同?

标签: java unit-testing entity-framework


【解决方案1】:

您应该能够独立设置和使用实体和“工人”(如您所说)类或 servlet 和 Web 容器。

使用纯 JDBC 和 JUnit,您通常会执行以下操作:

  1. TestCase 构造函数中打开 JDBC 连接。
  2. setUp() 上开始交易。
  3. 回滚tearDown() 上的事务。
  4. 在特定的testXxx() 方法中使用实际的实体实例。

在这种方法中,每个开发人员将拥有一个(可能是本地的)数据库实例。对于更高级的内容,请考虑DbUnit

【讨论】:

    【解决方案2】:

    一种选择是使用反射来查找实体的不同部分(即不同的字段),然后使用这些不同的实体调用方法调用保存、更新、删除等。然后,当您添加一个新实体时,如果您的设置是使用 xml 或类似的东西完成的,那么测试就会选择它们。

    我是从 Hibernate 用户的角度说的,所以这可能并不完全适用于您的情况,但过去对我来说效果很好。

    【讨论】:

    • 你能澄清一下“使用反射”部分吗?这将如何帮助确定填充实体的值?特别是因为其中一些(大多数?)可能在应用程序和/或数据库级别具有约束。
    • 因此,在 hibernate 中,我们对有助于跟踪该信息的类进行了注释,例如 @column(length=50) 来通知我们 VARCHAR 最长可以是 50。我们也有一些标准,比如不在数据库中做奇怪的验证(即奇怪的、非标准的约束)。您可以找到每个字段的类型,然后使用它来生成一个值。如果该字段本身是一个实体,您可以从数据库中附加一个现有的或创建一个新的(视情况而定 - 即多对一与多对多关系)
    • 很公平。不过,我不得不说,听起来您正在测试 Hibernate Validator 和您的 DAO 一样多(或更多):-)
    • 没错,我更多的是检查 DAO 是否已正确设置,以便与我们的数据库和持久层一起使用。在这种情况下,我也在检查 DTO,并确保它们被正确映射。
    猜你喜欢
    • 2013-10-13
    • 2011-11-05
    • 2017-07-27
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多