如何测试 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 规范?
我看到以下选项。
硬着头皮创建集成测试,即针对内存数据库或测试容器创建 EntityManager
和 运行 查询。
通过传入仔细配置的模拟,然后使用类型检查、反射和 JPA 提供程序内部知识来断言您将获得正确的谓词。
第二种方法的问题是它很脆,很可能会折断,尽管 Specification
实际上很好。
因此,我会选择选项 1,尽管我也更喜欢单元测试。
我有一个根据过滤器创建 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 规范?
我看到以下选项。
硬着头皮创建集成测试,即针对内存数据库或测试容器创建
EntityManager
和 运行 查询。通过传入仔细配置的模拟,然后使用类型检查、反射和 JPA 提供程序内部知识来断言您将获得正确的谓词。
第二种方法的问题是它很脆,很可能会折断,尽管 Specification
实际上很好。
因此,我会选择选项 1,尽管我也更喜欢单元测试。