如何测试 JPA 规范

How to test JPA Specification

我有一个根据过滤器创建 JPA 规范的构建器。我如何测试生成器? assertEquals 方法在比较规范时总是 return false...

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

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

我预计 assertEquals(nullSpecification, nullSpecification2) 到 return 为真,但实际值为假。我如何比较 JPA 规范?

我看到以下选项。

  1. 硬着头皮创建集成测试,即针对内存数据库或测试容器创建 EntityManager 和 运行 查询。

  2. 通过传入仔细配置的模拟,然后使用类型检查、反射和 JPA 提供程序内部知识来断言您将获得正确的谓词。

第二种方法的问题是它很脆,很可能会折断,尽管 Specification 实际上很好。 因此,我会选择选项 1,尽管我也更喜欢单元测试。