【问题标题】:How to test Hibernate object equality in test code?如何在测试代码中测试 Hibernate 对象相等性?
【发布时间】:2021-04-04 06:06:12
【问题描述】:

我有一个没有实现 equals 方法的 Hibernate 类。

我的服务层有许多返回此类的方法。

例如,我的服务层方法之一是:

public List<User> getUsers() {
    return this.userRepository.findAll();
}

User 只是

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name", nullable = false)
    private String name;

    @Column(name = "email", nullable = false)
    private String email;
}

在我的测试代码中,我想断言服务方法返回的对象与我期望它们返回的对象之间的相等性。

但是,在 Hibernate 类上实现检查所有字段是否相等的 equals 方法是没有意义的(如 The JPA hashCode() / equals() dilemma 中所述)。

目前,为了解决这个问题,我正在将我的 Hibernate 类转换为一个类,该类确实具有检查每个字段是否相等的 equals 方法。它有效,但不太优雅。

有没有更好的方法来做到这一点?

【问题讨论】:

  • 您的实体类中有业务密钥吗?
  • 是的,但我想断言所有字段都是平等的,而不仅仅是业务键是平等的。我会发布我的课程,这样问题就更清楚了。
  • 哪个断言库?通常,断言库提供逐个字段或使用自定义比较器比较对象的方法。在 AssertJ 中,您可以使用 isEqualToComparingFieldByFieldRecursively(),例如
  • 很有意思,目前正在使用junit5。

标签: java spring hibernate


【解决方案1】:

【讨论】:

    最近更新 更多