繁体   English   中英

如何编写弹簧规格的单元测试?

[英]How to write a unit test for spring specification?

我创建了一个构建规范类的构建器类。 它用于为JpaSpecificationExecutor创建查询。 之所以使用该构建器,是因为我有许多可以为空/空的参数(来自用户进行过滤),没有它我就不能仅使用“ Specifications

public class SpecificationBuilder<T> {

    private Specifications<T> specification;

    public SpecificationBuilder() {

    }

    public SpecificationBuilder(final Specification<T> spec) {
        specification = Specifications.where(spec);
    }

    public SpecificationBuilder<T> appendOr(final Specification<T> spec) {
        specification = Specifications.where(spec).or(specification);
        return this;
    }

    public SpecificationBuilder<T> appendAnd(final Specification<T> spec) {
        specification = Specifications.where(spec).and(specification);
        return this;
    }

    public Specification<T> build() {
        return Specifications.where(specification);
    }

}

我的问题是我不知道如何单独进行测试。 当然,我可以自动连接真正的存储库(在内存中的db上),但我不想为此涉及任何其他类,并且仅测试逻辑,如何创建OR和AND子句。

不幸的是,在Spring API中,我找不到任何可以帮助您的方法

  1. 如果必须测试与数据库通信的实际代码,请使用DBUnit简化工作,建议使用HSQLDB,以便测试可以在运行时设置其环境,而无需已安装数据库和配置。 在集成测试中,您检查查询是否正确:,可执行文件,返回预期结果,数据模型是否有效……您无需检查集成测试中的所有可能组合,只需检查正确的执行和预期结果即可。

  2. 如果您不必与数据库进行对话(appendOr,appendAnd-您检查行为,而不是数据。请检查规范构建器具有预期的行为-apply AND或OR .....谓词),请使用通用的模拟库:EasyMock ,Mockito或其他任何东西,并使测试与数据库不真正对话,这通常会使测试更快,更简单。

因此,如果您想“仅测试逻辑,OR和AND子句的创建方式”,则可以使用模拟方法检查创建方式,但是您应该至少对方法进行一次集成测试:规范build(),其标准数量最多appendOr,appendAnd ....

举例来说:这是spring-data如何测试代码的例子:

使用模拟的单元测试: https : //github.com/spring-projects/spring-data-jpa/blob/master/src/test/java/org/springframework/data/jpa/repository/query/SimpleJpaQueryUnitTests.java

和集成测试: https : //github.com/spring-projects/spring-data-jpa/blob/master/src/test/java/org/springframework/data/jpa/repository/query/JpaCountQueryCreatorIntegrationTests.java

有两种类型的测试和乳清专用于不同的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM