我正在为SystemLoggingService编写单元测试并模拟对它的存储库的所有调用.
我正在使用带有JPA存储库的Spring.
@Repository
public interface SystemLoggingRepository extends PagingAndSortingRepository<SystemLogEntity, Long>, JpaSpecificationExecutor<SystemLogEntity> {
}
对于服务方法findAll(可搜索的可搜索,可分页的可分页)的单元测试,我需要模拟存储库方法findAll(规范< T>规范,Pageable pageable)
正如人们所见,Searchable对象被转换为服务逻辑中的JPA规范对象.
问题是我的服务逻辑将传递给存储库方法的JPA规范类没有实现equals().
换句话说,我不能非常精确地模拟存储库方法,因为我必须使用Matchers.any(Specifications.class)
BDDMockito.given(systemLoggingRepository.findAll(Matchers.any(Specifications.class), Matchers.eq(pageRequest))).willReturn(...)
这对于单元测试的质量有多糟糕,还是这种常见的做法?对这个问题有什么不同的解决方法?
Specifications对象是一个Spring框架类.不能只添加equals()方法.
解决方法:
除了@VolodymyrPasechnyk的答案之外,你可能会考虑将创建规范对象的责任提取到一个单独的类,这将是对你的CUT的另一个依赖.