如何测试JPA规范

6

我有一个构建器,可以根据过滤器创建JPA规范。 我该如何测试构建器?当比较规范时,assertEquals方法总是返回false...

我已经尝试使用虚拟参数调用Specification::toPredicate方法,但返回的值为null。 我想避免加载entityManager

Specification<MyClass> nullSpecification = Specification.where(null);
Specification<MyClass> nullSpecification2 = Specification.where(null);
assertEquals(nullSpecification, nullSpecification2);

我本想assertEquals(nullSpecification, nullSpecification2)返回true,但实际值是false。我该如何比较JPA规约?

1个回答

4
我看到以下选项。
  1. 硬着头皮创建一个集成测试,即创建一个 EntityManager 并针对内存数据库或 Testcontainers 运行查询。

  2. 通过传递精心配置的模拟对象来检查生成的 Predicate 的内部实现,然后使用类型检查、反射和对 JPA 提供程序内部机制的了解来断言您将获得正确的谓词。

第二种方法的问题在于它非常脆弱,很可能会破裂,尽管 Specification 实际上是正确的。 因此,我会选择第一种选项,尽管我也更喜欢有单元测试。


谢谢,我想我会两者都做 :) - Jerome

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接