【问题标题】:How to test JPA Specification如何测试 JPA 规范
【发布时间】:2019-09-12 13:21:55
【问题描述】:

我有一个根据过滤器创建 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 规范?

【问题讨论】:

    标签: java spring-data-jpa junit5


    【解决方案1】:

    我看到以下选项。

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

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

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

    【讨论】:

    • 谢谢你,我想我会做两个:)
    猜你喜欢
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 2019-11-18
    • 1970-01-01
    • 2018-07-16
    相关资源
    最近更新 更多