我创建了一个构造Specifications对象的构建器类。它用于为JpaSpecificationExecutor
创建查询。使用构建器,因为我有许多参数可以为null / empty(来自用户进行过滤),如果没有它,我就不能只使用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);
}
}
我的问题是我不知道如何单独测试它。当然我可以自动装载真实存储库(在内存中的数据库),但我想不涉及任何其他类,只测试逻辑,如何创建OR和AND子句。
不幸的是,在Spring API中我找不到任何有用的方法
答案 0 :(得分:2)
如果您必须测试与数据库对话的实际代码,请使用DBUnit使您的生活更轻松,并建议您使用HSQLDB,以便您的测试能够在运行时设置其环境,而无需要求已安装和配置数据库。 在内部集成测试中,您检查查询是否:正确,可执行,返回预期结果,数据模型是否有效......您不需要检查集成测试中的所有可能组合,只检查正确执行和结果为预期
如果你不必与DB交谈(appendOr,appendAnd - 你检查行为,而不是数据。检查规范构建器是否有预期的行为 - 应用AND,OR .....谓词) ,使用一般的模拟库:EasyMock,Mockito或任何其他,并使测试不是真正与DB通信,这通常会使测试更快更简单。
因此,如果您只想测试逻辑,那么如何创建OR和AND子句&#39;您可以使用mock来检查创建方式,但是您应该对方法进行最小化集成测试:使用appendOr,appendAnd等最大标准量的规范build()
仅举例来说:例如,spring-data如何测试代码:
有两种类型的测试和乳清专用于不同的情况。