使用自动生成的键为数据库项创建 JUnit 测试

Posted

技术标签:

【中文标题】使用自动生成的键为数据库项创建 JUnit 测试【英文标题】:Creating JUnit tests for database items with auto generated keys 【发布时间】:2009-08-24 10:07:14 【问题描述】:

我有一个带有存储在数据库中的主键的类。创建类的新实例时,它可以从 HSQLDB 数据库中获取,也可以对于不在数据库中的项目,它会插入除主键之外的所有内容,这是自动生成的并返回给类以设置 id 属性。然后我有一个 getID() 方法来检索这个 ID。

我正在尝试编写一个 JUnit 测试来检查以确保生成的 ID 是由 getID() 方法返回的,但我已经使用“CALL IDENTITY”查询来检索构造函数中的 ID 以及随后的使用return 0. 确保生成的 ID 与 getID() 方法返回的 id 相同的最佳方法是什么?

【问题讨论】:

【参考方案1】:

我真的会考虑不同的设计来测试这些类。在大多数情况下,访问数据库实际上并不是单元测试。如果 db ID 生成器工作并且有一个测试,那么你不应该真的需要它来测试你的类。

如果你的类可以返回一个 Id,那么你的类返回在正确的时间放入其中的 id 就很重要了。

【讨论】:

我更想测试类的 getID() 方法。恰好这个 ID 是由数据库生成的,所以我不能简单地检查它是否是我告诉它实例化的。 @Haegin - 我个人没有明确测试吸气剂。我尝试测试行为(可能通过 getter 可见)。如果你所有的getID() 都在返回一个private 字段,那么测试真的不值得写,恕我直言,你的系统行为当然不应该依赖于持久化的对象。

以上是关于使用自动生成的键为数据库项创建 JUnit 测试的主要内容,如果未能解决你的问题,请参考以下文章

共享内存段的键为0 [重复]

在 JUnit 5 测试中模拟 Spring Boot 2 应用程序的自动装配依赖项

具有依赖项的 Maven2 + JMeter + JUnit

session.getAttribute() 的键为空,在 spring 框架 3.2.4 应用程序上使用 OWASP_CSRFTOKEN

IDE_IntelliJ IDEAIDEA中使用Junit插件自动创建测试用例到test目录

在 Spring Boot 应用程序的 JUnit 测试中,自动装配的 JPA 存储库没有合格的 bean