Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何编写弹簧规格的单元测试?_Java_Spring_Unit Testing_Testing_Spring Data Jpa - Fatal编程技术网

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

Java 如何编写弹簧规格的单元测试?,java,spring,unit-testing,testing,spring-data-jpa,Java,Spring,Unit Testing,Testing,Spring Data Jpa,我创建了一个构建器类来构造对象。它用于为JpaSpecificationExecutor创建查询。之所以使用构建器,是因为我有许多参数可以为null/空(来自用于筛选的用户),如果没有它,我不能仅使用规范: public class SpecificationBuilder<T> { private Specifications<T> specification; public SpecificationBuilder() { }

我创建了一个构建器类来构造对象。它用于为
JpaSpecificationExecutor
创建查询。之所以使用构建器,是因为我有许多参数可以为null/空(来自用于筛选的用户),如果没有它,我不能仅使用
规范

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);
    }

}
公共类规范生成器{
专用规范;
公共规范生成器(){
}
公共规范生成器(最终规范规范){
规格=规格。其中(规格);
}
公共规范建筑商附录(最终规范规范){
规范=规范。其中(规范)或(规范);
归还这个;
}
公共规范建筑商附录和(最终规范规范){
规范=规范,其中(规范)和(规范);
归还这个;
}
公共规范构建(){
退货规格。其中(规格);
}
}
我的问题是,我不知道如何单独测试它。当然,我可以自动连接真实存储库(在内存数据库中),但我不想涉及任何其他类,只测试逻辑、OR子句的创建方式

不幸的是,在SpringAPI中,我找不到任何有帮助的方法

  • 如果您必须测试与DB对话的实际代码,请使用DBUnit使您的生活更轻松,建议您使用HSQLDB,以便您的测试能够在运行时设置其环境,而不需要已经安装和配置数据库。 在集成测试中,您检查查询是否正确、可执行、返回预期结果、数据模型是否有效。。。。。。您不需要检查集成测试中所有可能的组合,只检查正确的执行和预期的结果

  • 如果您不必与DB对话(appendOr、appendAnd-您检查的是行为,而不是数据。检查规范生成器是否具有预期的行为-应用和,或…谓词),请使用通用模拟库:EasyMock、Mockito或任何其他,并使测试不会真正与DB对话,这通常会使测试更快、更简单

  • 所以,如果您想“只测试逻辑,如何创建OR和and子句”,您可以使用mock检查创建方式,但您应该至少对方法进行一次集成测试:Specification build(),具有最大数量的条件,如Appender、Appender和

    举个例子:下面是spring数据如何测试代码的例子:

    使用模拟进行单元测试:

    及 集成测试:


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

    我不会这么说,我的意思是写一个通用规范,我认为这是在重写JPA背后的意图。我只写具体的规范,大多数情况下SpringJPA都可以处理。当然,这只是我个人的意见。我有10个参数,可以是空的,也可以不是空的。我不会写10!单一规格