如何测试 JPA 规范

Jer*_*ome 7 java spring-data-jpa junit5

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

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

Specification<MyClass> nullSpecification = Specification.where(null);
Specification<MyClass> nullSpecification2 = Specification.where(null);
assertEquals(nullSpecification, nullSpecification2);
Run Code Online (Sandbox Code Playgroud)

我期望assertEquals(nullSpecification, nullSpecification2)返回 true,但实际值是 false。如何比较 JPA 规范?

Jen*_*der 5

我看到以下选项。

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

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

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